链表的应用

本文介绍了一种通过链表实现的算法,该算法用于找出一组数据中相邻k个节点值之和最大的起始节点。文章提供了完整的C语言代码示例,包括链表的创建和求和过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:求相邻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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值