本篇文章给大家谈谈c语言合并有序链表,以及c语言两个链表合并为一个有序链表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、如何用C语言把两个有序线性列表合并成一个有序线性链表(不超过10行的程序)2、c语言实现两个顺序表的合并3、C语言 把两个有序链表合并为一个有序链表(递增)
如何用C语言把两个有序线性列表合并成一个有序线性链表(不超过10行的程序)
#includestdio.h
#include malloc.h
#includelimits.h
#define MAX 1024
void merge(int a[],int p,int q,int b[],int r,int s,int c[])
{int i,j,n1,n2,n,k,m;
n1=q-p+1;
n2=s-r+1;
int *l=(int *)malloc(sizeof(int)*(n1+1));
for(i=0;in1;i++)
l[i]=a[p+i-1];
int *t=(int *)malloc(sizeof(int)*(n2+1)); for(j=0;jn2;j++)
t[j]=b[r+j-1];
l[n1]=INT_MAX;t[n2]=INT_MAX;
i=0;
j=0;
for(k=0;kn1+n2;k++)
{if(l[i]t[j]){c[k]=l[i];
i++;}
else {c[k]=t[j];
j++;}}
for(i=0;in1+n2;i++)
printf(“%d “,c[i]);
printf(“\n”);
}
int main()
{
int i;
int arr[] = {4,5,9,1000,1001};
int arr2[] = {1,7,8,999,1003,1005};
int *res = (int*)malloc(sizeof(int) * 100);
merge(arr,1,5,arr2,1,6,res);
return 0;
}
c语言实现两个顺序表的合并
一个算法给你(假如是升序,并且不重复)
while(表1不结束 表2不结束) {
if (表1结束 || 表1.当前值表2.当前值) {表2.当前值插入新表;表2.当前值向后移动}
else if (表2结束 || 表1.当前值表2.当前值) {表1.当前值插入新表;表1.当前值向后移动}
else if (表1.当前值=表2.当前值) {表1.当前值插入新表;表1.当前值和表2.当前值向后移动}
}
#includestdio.h
#includemalloc.h
#includestdlib.h
struct student {
int num;
struct student *next;
};
void print(struct student *head) {
struct student *p;
p=head;
char s=’ ‘;
if(head==NULL) {
printf(“该链表为空”);
}
if(head!=NULL) {
do {
printf(“%c%c%d”,s,s,p-num);
p=p-next;
} while(p!=NULL);
printf(“\n”);
}
}
struct student *creatb() {
struct student *head;
struct student *p1,*p2;
int n=0;
p1=p2=(struct student*)malloc(sizeof(struct student));
scanf(“%d”,p1-num);
head=NULL;
while(p1-num!=0) {
n=n+1;
if(n==1)
head=p1;
else
p2-next=p1;
p2=p1;
p1=(struct student*)malloc(sizeof(struct student));
scanf(“%d”,p1-num);
}
p2-next=NULL;
return head;
}
int main() {
struct student *head1,*head2,*head3;
head1=NULL;
head2=NULL;
head3=NULL;
printf(“请输入单链表La,输入0表示输入结束:\n”);
head1=creatb();
printf(“输入的链表为:”);
print(head1);
printf(“请输入单链表Lb,输入0表示输入结束:\n”);
head2=creatb();
printf(“输入的链表为:”);
print(head2);
struct student *a,*b,*c, *tmpNode;
a=head1-next;
b=head2;//
head3=c=head1;
while(a != NULL || b != NULL) {
if(b == NULL || (a != NULL a-num b-num)) {
c-next=a;
c=a;
a=a-next;
} else if(a == NULL || (b != NULL a-num b-num)) {
c-next=b;
c=b;
b=b-next;
} else if (a != NULL b != NULL) {
c-next=a;
c=a;
a=a-next;
tmpNode = b;
b = b-next;
free(tmpNode);
}
}
c-next=NULL;
printf(“合并后的有序链表为:”);
print(head3);
c = head3;
while(c) {
tmpNode = c;
c = c-next;
free(tmpNode);
}
return 0;
}
C语言 把两个有序链表合并为一个有序链表(递增)
设链表结点结构为Node(int data, Node *next),typedef Node List,链表均带表头结点。
思路是:把list1中的元素看成是集合1,把list2中的元素看成是集合2,把list1头结点(即list1结点)从集合1中脱离下来看成是目标集合的头结点,目标集合开始时是空集,并用last指针始终指向该集合的尾部,然后每次从集合1和集合2中取各自的第一个元素进行比较,较小者从相应集合里脱离,插入到目标集合list1的尾部即last的末尾,并将刚插入的元素作为目标集合list1的新的last,直到集合1为空或集合2为空时结束,最后将未空的集合中的剩余元素链接到last后面即可。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。
关于c语言合并有序链表和c语言两个链表合并为一个有序链表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。