#includetypedefstructnode{chardata;//data为结点的数据信息structnode*next;//next为指向后"> #includetypedefstructnode{chardata;//data为结点的数据信息structnode*next;//next为指向后" />

两个升序表合并成一个降序表

ID:44705003

大小:73.00 KB

页数:3页

时间:2019-10-25

两个升序表合并成一个降序表_第1页
两个升序表合并成一个降序表_第2页
两个升序表合并成一个降序表_第3页
资源描述:

《两个升序表合并成一个降序表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include"stdafx.h"#include#includetypedefstructnode{chardata;//data为结点的数据信息structnode*next;//next为指向后继结点的指针}LNode;//单链表结点类型LNode*CreateLinkList()//生成单链表{LNode*head,*p,*q;inti,n;head=(LNode*)malloc(sizeof(LNode));//生成头结点head->next=NULL;p

2、=head;q=p;//指针q始终指向链尾结点printf("输入链表的长度:");scanf("%d",&n);//读入结点数据printf("输入链表中元素的排列顺序为:");for(i=n;i>0;i--)//生成链表的数据结点{p=(LNode*)malloc(sizeof(LNode));//申请一个结点空间scanf("%d",&p->data);p->next=NULL;q->next=p;//在链尾插入q=p;}returnhead;//返回指向单链表的头指针head}voidMe

3、rgeList(LNode*A,LNode*B,LNode**C)//将升序链表A、B合并成降序链表*C{LNode*p,*q,*s;p=A->next;//p指向链表A的第一个未比较的数据结点q=B->next;//q指向链表B的第一个未比较的数据结点*C=A;//生成链表的*C的头结点(*C)->next=NULL;free(B);//释放链表B的头结点空间while(p!=NULL&&q!=NULL)//将A、B两链表中当前比较结点中值小的元素赋给*s{if(p->datadata){s=p

4、;p=p->next;}else{s=q;q=q->next;}s->next=(*C)->next;//用头插法将结点*s插到链表*C的头结点之后(*C)->next=s;}if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表Bp=q;while(p!=NULL)//将*p所指链表中的剩余结点依次摘下插入的链表C的链首{s=p;p=p->next;s->next=(*C)->next;(*C)->next=s;}}voidprint(LNode*p)//输出单链表{p=p->next

5、;while(p!=NULL){printf("%d,",p->data);p=p->next;}printf("");}intmain(intargc,char*argv[]){LNode*A,*B,*C;printf("输入链表A:");A=CreateLinkList();//生成单链表Aprintf("输出链表A的元素为:");print(A);//输出单链表Aprintf("输入链表B:");B=CreateLinkList();//生成单链表Bprintf("输出链表B的元素为

6、:");print(B);//输出单链表Bprintf("生成元素值递减的新链表C:");MergeList(A,B,&C);//将升序链表A、B合并成降序链表Cprintf("输出新链表C为:");print(C);//输出单链表Creturn0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
正文描述:

《两个升序表合并成一个降序表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include"stdafx.h"#include#includetypedefstructnode{chardata;//data为结点的数据信息structnode*next;//next为指向后继结点的指针}LNode;//单链表结点类型LNode*CreateLinkList()//生成单链表{LNode*head,*p,*q;inti,n;head=(LNode*)malloc(sizeof(LNode));//生成头结点head->next=NULL;p

2、=head;q=p;//指针q始终指向链尾结点printf("输入链表的长度:");scanf("%d",&n);//读入结点数据printf("输入链表中元素的排列顺序为:");for(i=n;i>0;i--)//生成链表的数据结点{p=(LNode*)malloc(sizeof(LNode));//申请一个结点空间scanf("%d",&p->data);p->next=NULL;q->next=p;//在链尾插入q=p;}returnhead;//返回指向单链表的头指针head}voidMe

3、rgeList(LNode*A,LNode*B,LNode**C)//将升序链表A、B合并成降序链表*C{LNode*p,*q,*s;p=A->next;//p指向链表A的第一个未比较的数据结点q=B->next;//q指向链表B的第一个未比较的数据结点*C=A;//生成链表的*C的头结点(*C)->next=NULL;free(B);//释放链表B的头结点空间while(p!=NULL&&q!=NULL)//将A、B两链表中当前比较结点中值小的元素赋给*s{if(p->datadata){s=p

4、;p=p->next;}else{s=q;q=q->next;}s->next=(*C)->next;//用头插法将结点*s插到链表*C的头结点之后(*C)->next=s;}if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表Bp=q;while(p!=NULL)//将*p所指链表中的剩余结点依次摘下插入的链表C的链首{s=p;p=p->next;s->next=(*C)->next;(*C)->next=s;}}voidprint(LNode*p)//输出单链表{p=p->next

5、;while(p!=NULL){printf("%d,",p->data);p=p->next;}printf("");}intmain(intargc,char*argv[]){LNode*A,*B,*C;printf("输入链表A:");A=CreateLinkList();//生成单链表Aprintf("输出链表A的元素为:");print(A);//输出单链表Aprintf("输入链表B:");B=CreateLinkList();//生成单链表Bprintf("输出链表B的元素为

6、:");print(B);//输出单链表Bprintf("生成元素值递减的新链表C:");MergeList(A,B,&C);//将升序链表A、B合并成降序链表Cprintf("输出新链表C为:");print(C);//输出单链表Creturn0;}

显示全部收起
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭