数据结构课程设计 实验报告 心得体会 链表 C语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计题目: 两个链表的交叉合并

专业班级:08软件工程3班

姓名:xxxxxx

学号: 080107031123

设计时间:2010/9/25

指导教师:杨薇薇

一、设计题目

实现两个链表的合并

设计目的

1.掌握线性链表的建立。

2.掌握线性链表的基本操作。

设计内容和要求

1. 建立两个链表A和B,链表元素个数分别为m和n个。

2. 假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线形表C,使得:

当m>=n时,C=x1,y1,x2,y2,...xn,yn, (x)

当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn

输出线性表C。

3. 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。

4. 能删除指定单链表中指定位子和指定值的元素。

二、运行环境(软、硬件环境)

软件环境: VC++6.0编程软件,运行平台:Win32

硬件:普通个人pc机、算法设计的思想

三、算法的流程图

四、算法设计分析

这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。

五、源代码

程序源代码:

#include

#include

typedef struct node //节点定义

{

int data;

struct node *next;

} node,*linklist;

linklist creat(linklist head) //该函数用来创建链表{

node *r,*s;

int a;

r = (linklist)malloc(sizeof(node));

head = r;

scanf("%d",&a);

while(a != 0)

{

s =(node*)malloc(sizeof(node));

s->data=a;

r->next=s;

r=s;

printf("please input a data:");

scanf("%d",&a);

}

r->next=NULL;

return head;

}

linklist length(linklist l) // 返回L中数据元素个数

{

int i=0;

linklist p=l->next; // p指向第一个结点

while(p)

{

i++;

p=p->next;

}

return i;

}

linklist mergel(linklist A,linklist B) //用于实现链表A,B的交叉组合 {

int m,n;

node *p,*q,*s,*t;

linklist C;

p=A->next;

q=B->next;

m=length(A);

n=length(B);

C=A;

if(m

{

p=B->next;

q=A->next;

C=B;

}

while(p&&q)

{

s=p->next;

p->next=q;

if(s)

{

t=q->next;

q->next=s;

}

p=s;

q=t;

}

return C;

}

linklist sort(linklist L) //链表内容升序排列

{

linklist p,q,min;

int temp;

p=L;

while( p=p->next )

{

q=min=p;

while(q=q->next){

if( q->datadata )

min = q;

}

if( min!=p )

{

temp = p->data;

p->data = min->data;

min->data=temp;

}

}

return L;

}

linklist Delete(linklist l,int index) //删除链表指定位置元素{ linklist p,t;

int cx=1; //用于计数

p=l;

if(index

{

while(p&&(cx

{

t=p;

p=p->next;

cx++;

}

t->next=p->next;

}

else

相关文档
最新文档