[作业]两个有序表合并为一个有序表

[作业]两个有序表合并为一个有序表

#include "stdio.h"
#include "malloc.h"
typedef struct LNode {
	int data;
	struct LNode *next;
}LNode, *LinkList;

LNode* InitLList_step(int low, int up,int step) {  //创建步长为step的有序链表
	LNode *head, *s, *r;	//head,r 头,尾
	head = (LNode *)malloc(sizeof(LNode));
	r = (LNode *)malloc(sizeof(LNode));
	head->data = 9527;
	head->next = r;			//设置head结点成员
	r->data = low;
	r->next = NULL;			//设置r结点成员
	for (int i = low + step; i <= up;) {
		s = (LNode *)malloc(sizeof(LNode));
		s->data = i;		//i==>s.data
		s->next = r->next;	//s.next --> r.next == NULL ,设置链表末尾指针为空
		r->next = s;		//r.next --> s 的地址
		r = s;				//s为临时变量,最后链表末尾替换为r
		i=i + step;
	}
	return head;
} //InitLList_step

void PrintLList(LNode* l) {	//传入参数l为该链表的head
	LNode* s;
	s = l->next;		//s = 链表 head.next 为指针
	while (s) {			//保证s不是链表末尾 即 地址s存在
		printf("%d\t", s->data);
		s = s->next;	//s指针后移,依次打印
	}printf("\n");
} //PrintLList

LNode* MergeLList(LNode* l1, LNode* l2) { //合并顺序链表
	LNode *head, *s, *r;	//head,r 头,尾
	LNode* s1, *s2;
	head = (LNode *)malloc(sizeof(LNode));
	r = (LNode *)malloc(sizeof(LNode));
	head->data = 9527;
	head->next = r;			//设置head结点成员

	s1 = l1->next;			//s = 链表 head.next 为指针
	s2 = l2->next;
	if (s1->data < s2->data){
		r->data = s1->data;
		r->next = NULL;		//设置r结点成员
		s1 = s1->next;		//s指针后移
	}else {
		r->data = s2->data;
		r->next = NULL;
		s2 = s2->next;
	}
	while (s1 && s2) {		//循环到末尾
		if (s1->data < s2->data){
			s = (LNode *)malloc(sizeof(LNode));
			s->data = s1->data;	//s1.data ==>s.data
			s->next = r->next;	//s.next --> r.next == NULL ,设置链表末尾指针为空
			r->next = s;		//r.next --> s 的地址
			r = s;				//s为临时变量,最后链表末尾替换为r
			s1 = s1->next;		//s1指针后移
		}else {
			s = (LNode *)malloc(sizeof(LNode));
			s->data = s2->data;
			s->next = r->next;
			r->next = s;
			r = s;
			s2 = s2->next;
		}
	}
	if (s1){ s->next = s1; } //谁没到末尾 则继续连接谁
	else { s->next = s2; }

	return head;
} // MergeLList

int main() {
	LNode* L1,*L2,*LL;
	printf("创建顺序链表: \n");
	L1 = InitLList_step(1, 10, 2); //创建链表并返回该链表的head给L1
	PrintLList(L1);
	L2 = InitLList_step(2, 20, 4);
	PrintLList(L2);
	printf("合并顺序链表: \n");
	LL = MergeLList(L1, L2);
	PrintLList(LL);
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值