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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。

相关文档
最新文档