数据结构课程设计实验报告心得体会链表C语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件环境:VC++6.0编程软件,运行平台:Win32
硬件:普通个人pc机、 算法设计的思想
三、算法的流程图
的轻柔,但可以有岩石般的坚毅与稳重。没有大海般的浩瀚,没有瀑布般的飞泻,但可以有泥土般的朴素 与随和。
四、算法设计分析
这个两个链表的交叉合并算法主要运用到的是链表的基本操
作,定义节点,将链表的创建、计算链表的长度、链表
指向第一个结点
linklist mergel(linklist A,linklist B) // {
int m,n;
node *p,*q,*s,*t;
lin klist C;
p=A- >n ext;
q=B->n ext;
m=le ngth(A);
n=len gth(B);
C=A;
if(m <n)
{
p=B->n ext;
scaபைடு நூலகம்nf("%d",&a);
}
r->n ext=NULL;
return head;
}
linklist length(linklist I) {
int i=0;
lin klist p=l->n ext; while(p)
{
i++;p=p->n ext;
}
return i;
}
//
// P
返回L中数据元素个数
数 据 结 构 课 程 设 计
设计题目
专业班级
姓名:
学号:
设计时间:
指导教师:杨薇薇
一、 设计题目
实现两个链表的合并
设计目的
1.掌握线性链表的建立。
2.掌握线性链表的基本操作。
设计内容和要求
1.建立两个链表A和B,链表元素个数分别为m和n个。
2.假设元素分别为(x1,x2,…xm),和(y1,y2,…yn)。把它
们合并成一个线形表C,使得:
当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm
当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn
输出线性表Co
3.用直接插入排序法对C进行升序排序,生成链表D,并输
出链表Do
4.能删除指定单链表中指定位子和指定值的元素。
运行环境(软、硬件环境)
r = (li nklist)malloc(sizeof( no de));
head = r;
scan f("%d",&a);
while(a != 0)
{
s =(no de*)malloc(sizeof( no de));
s->data=a;
r->n ext=s;
r=s;
prin tf("please in put a data:");
q=A- >n ext;
C=B;
}
用于实现链表A,B的交叉组合
while(p&&q)
{
s=p->n ext;
p->n ext=q; if(s)
{
t=q->n ext; q->n ext=s;
}
p=s;
q=t;
}
组合、链表内容升序排列、删除链表指定位置元素、删除指定的元 素等算法写成了独立函数,通过主函数调用。这样就大大精简了主 函数的操作。但主函数中很大篇幅用到了
定链表指定结点和指定元素的删除操作,
得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的 改进,不断优化该程序。
五、源代码
程序源代码
#i nclude<stdio.h>
#i nclude<stdlib.h>
typedef struct node//节点定义
{
int data;
struct node *n ext;
} no de,*li nklist;
lin klist creat(li nklist head) //该函数用来创建链表
{
node *r,*s;
int a;
硬件:普通个人pc机、 算法设计的思想
三、算法的流程图
的轻柔,但可以有岩石般的坚毅与稳重。没有大海般的浩瀚,没有瀑布般的飞泻,但可以有泥土般的朴素 与随和。
四、算法设计分析
这个两个链表的交叉合并算法主要运用到的是链表的基本操
作,定义节点,将链表的创建、计算链表的长度、链表
指向第一个结点
linklist mergel(linklist A,linklist B) // {
int m,n;
node *p,*q,*s,*t;
lin klist C;
p=A- >n ext;
q=B->n ext;
m=le ngth(A);
n=len gth(B);
C=A;
if(m <n)
{
p=B->n ext;
scaபைடு நூலகம்nf("%d",&a);
}
r->n ext=NULL;
return head;
}
linklist length(linklist I) {
int i=0;
lin klist p=l->n ext; while(p)
{
i++;p=p->n ext;
}
return i;
}
//
// P
返回L中数据元素个数
数 据 结 构 课 程 设 计
设计题目
专业班级
姓名:
学号:
设计时间:
指导教师:杨薇薇
一、 设计题目
实现两个链表的合并
设计目的
1.掌握线性链表的建立。
2.掌握线性链表的基本操作。
设计内容和要求
1.建立两个链表A和B,链表元素个数分别为m和n个。
2.假设元素分别为(x1,x2,…xm),和(y1,y2,…yn)。把它
们合并成一个线形表C,使得:
当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm
当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn
输出线性表Co
3.用直接插入排序法对C进行升序排序,生成链表D,并输
出链表Do
4.能删除指定单链表中指定位子和指定值的元素。
运行环境(软、硬件环境)
r = (li nklist)malloc(sizeof( no de));
head = r;
scan f("%d",&a);
while(a != 0)
{
s =(no de*)malloc(sizeof( no de));
s->data=a;
r->n ext=s;
r=s;
prin tf("please in put a data:");
q=A- >n ext;
C=B;
}
用于实现链表A,B的交叉组合
while(p&&q)
{
s=p->n ext;
p->n ext=q; if(s)
{
t=q->n ext; q->n ext=s;
}
p=s;
q=t;
}
组合、链表内容升序排列、删除链表指定位置元素、删除指定的元 素等算法写成了独立函数,通过主函数调用。这样就大大精简了主 函数的操作。但主函数中很大篇幅用到了
定链表指定结点和指定元素的删除操作,
得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的 改进,不断优化该程序。
五、源代码
程序源代码
#i nclude<stdio.h>
#i nclude<stdlib.h>
typedef struct node//节点定义
{
int data;
struct node *n ext;
} no de,*li nklist;
lin klist creat(li nklist head) //该函数用来创建链表
{
node *r,*s;
int a;