数据结构_实验1:链表的应用

来源:互联网 发布:网络设备监控软件 开源 编辑:程序博客网 时间:2024/05/18 15:05
题目:求相邻k个节点数值之和最大的第一节点
输入数据(设为整型)建立单链表,并求相邻k个节点data值之和为最大的第一节点。例如输入k = 2,数据为2 6 4 7 3 #(#为结束符),建立下面链表,运行结果输出(序号3,data值4):



书上学的数据结构总是用指针和链表来操作,和刷题时的程序有点不一样,需要多练习

#include <cstdio>#include <cstdlib>int k,k1;               //k1为k的临时替代int sum;                //每次遍历的和int coun = 1;           //每个元素的序号int maxsum = 0;         //当前最大的和int ans1,ans2;          //存储输出的的序号和数值typedef struct node     //定义单链表{int data,time;struct node *next;}linknode,*link;link CreateList()       //建立新单链表,输入和存储{int a;link H,p,r;         //表头,新节点,表尾H = (link)malloc(sizeof(linknode));r = H;printf("Input numbers:\n");while(scanf("%d",&a)&&a!='#'){    p = (link)malloc(sizeof(linknode));    p->data = a;    p->time = coun;    coun++;    r->next = p;    r = p;}r->next = NULL;return H;}void Adjmax(link H)     //遍历求和与输出{    link p,p1,q,r,s,t;    p = H->next;    if((p == NULL)||(coun-1 < k))        return ;        //数据错误不做任何操作    while(p)            //求相邻k个元素的和    {        k1 = k;        sum = 0;        p1 = p;        while((k1--)&&(p1))        {            sum += p1->data;            q = p1->next;            p1 = q;        }        if(sum > maxest)        {            ans1 = p->time;            ans2 = p->data;            maxest = sum;        }        p = p->next;    }    printf("order:%d\ndata:%d\nmaxsum:%d",ans1,ans2,maxest);    return ;}int main(){    printf("Input k:\n");    scanf("%d",&k);    Adjmax(CreateList());return 0;}

0 0