当前位置:文档之家› 数据结构实验报告 有序表合并

数据结构实验报告 有序表合并

实验有序表合并姓名:窦晓磊班级:软件工程142
学号:********** 试验时间:2015.10.11
1.问题描述
把两个有序表归并为一个有序表。

2.数据结构设计
链表结点的结构为:
Typedef struct Node{
T data;
Node *next;
};
3.算法设计
(1)表的输入和输出。

设计一个输入输出函数Node *CreateList()。

Step1:设计指针。

Node *q, //工作指针,存储head
*Head, //头指针
*p; //工作指针,存储数据
int size, //用于存储有序表元素的个数
n; //元素的输入
Step2:利用指针进行输入。

q=Head=new Node; //建立头结点
利用循环输入
for(int i=1;i<=n;i++)
{
p=new Node; //建立结点
cin>>n; //输入元素
p->data=n; //将输入的元素赋值给链表
Head->next=p; //尾指针后移
Head=p; //指向下一个结点
Head=p;
}
Head->next=NULL; //设置尾指针
Head=q;
Step3:输出。

for(p=Head->next;p!=NULL;p=p->next)
cout<<p->data;
Return Head; //返回Head所指的链表
(2)合并算法
1’初始化
Step1:设置工作指针pa、pb,分别指向两个有序表LA、LB的首元结点。

Node *pa,*pb; //工作指针pa,pb
pa=LA->next;pb=LB->next;
Step2:生成新表LC的头结点,工作指针pc指向LC。

Node *pc;
LC=pc;
2’只要pa和pb有所指,循环执行下列操作。

While(pa!=NULL&&pb!=NULL)
Step1:生成一新结点,链到LC表尾,pc指向它。

LC=new Node;
如果pa->data<=pb->data:pc->data=pa->data;pa后移。

if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next; //指针后移
}
否则:pc->data=pb->data;pb后移。

else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
Step2:如果pb空,把pa开始的结点依次复制到pc
if(pa!=NULL)
{
pc->next=pa;
}
Step3:如果pa空,把pb开始的结点依次复制到pc。

while(pb!=NULL)
{
pc->next=pb;
}
4.运行与测试
(1)运行程序,A表输入11,22,33,44。

B表输入1,13,17,39。

A表输入11,B表输入1,13,17,39。

A表输入11,22,33,44,B表输入1。

A表输入11,22,33,44,B表为空
A表为空,B表输入1,13,17,39
A表为空,B表为空。

A表输入55,B表输入1 13 17 39
5.调试记录及收获。

1.在合并的函数里while后面少了{}导致程序在输出A表B表之后无法进行下去。

2.一开始输入输出函数在主函数里,发现太繁琐,所以把输入输出提取出来,做了一个新函数。

收获:程序可以用简洁的程序取代繁琐的程序。

通过本次实验对链表的理解更加深刻。

相关主题