实验报告03-两个有序链表的合并
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验目的及要求:
了解和掌握链表的特点;
掌握链表基本操作的实现;
掌握两个有序链表合并的算法
要求完成链表的初始化、插入、有序表合并、显示操作的实现。实验设备环境及要求:
PC机一台,内存要求128M以上,VC++6.0集成开发环境。
实验内容与步骤:
1、在VC++6.0环境中新建一个工程和C++文件;
2、实现链表初始化、插入、有序合并算法,代码如下:
#include
#include
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
int InitList_L(LinkList &L){
L= (LinkList)malloc(sizeof(LNode));
L->next=NULL;
return 1;
}
int ListInsert_L(LinkList &L,int i,ElemType e){
LinkList p;
p=L;
int j=0;
while(p&&j p=p->next; ++j; } if(!p||j>i-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return 1; } void Disp_L(LinkList L){ LinkList p=L->next; if(!p) printf("此链表为空!"); while(p){ printf("%d",p->data); p=p->next; } printf("\n"); } void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ LinkList pa=La->next; LinkList pb=Lb->next; LinkList pc=Lc=La; while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; } else{ pc->next=pb;pc=pb;pb=pb->next; } } pc->next=pa?pa:pb; free(Lb); } void main(){ LinkList La,Lb,Lc; InitList_L(La); InitList_L(Lb); InitList_L(Lc); ListInsert_L(La,1,2); ListInsert_L(La,2,3); ListInsert_L(La,3,5); Disp_L(La); ListInsert_L(Lb,1,1); ListInsert_L(Lb,2,4); ListInsert_L(Lb,3,6); ListInsert_L(Lb,4,7); Disp_L(Lb); MergeList_L(La,Lb,Lc); printf("合并之后的链表为:\n"); Disp_L(Lc); }实验指导与数据处理: 实验结果:235 1467 合并之后的链表为: 1234567 分析讨论: 本次实验通过对链表基本操作和两个有序链表合并算法的实现,加深了对链表特点的理解,并且熟悉了VC++6.0集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。