当前位置:文档之家› 实验报告03-两个有序链表的合并

实验报告03-两个有序链表的合并

实验目的及要求:
了解和掌握链表的特点;
掌握链表基本操作的实现;
掌握两个有序链表合并的算法
要求完成链表的初始化、插入、有序表合并、显示操作的实现。

实验设备环境及要求:
PC机一台,内存要求128M以上,VC++6.0集成开发环境。

实验内容与步骤:
1、在VC++6.0环境中新建一个工程和C++文件;
2、实现链表初始化、插入、有序合并算法,代码如下:
#include <stdio.h>
#include <malloc.h>
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<i-1){
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集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。

相关主题