单链表的操作实现实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
printf("插入位置不合法!"); return 0;
}
q=(Node*)malloc(sizeof(Node));
q->data=x;
q->n ext=p->n ext; p_>n ext=q;
return 1;
}
//输出
void Output(L in kList head)
{
/*定义节点指针类型,并指向首元结点*/
}
r->n ext=NULL;
return h;
}
/*头部插入*/
int CreatfromH(L in kList head)
{
Lin kList p;
ElemType x;
puts("输入数据,输入-1000结束输入!");
while(1)
{
sca nf("%d", &x);
if(x!=-1000)
#in clude<stdlib.h>
#in clude<c oni o.h>
#i nclude<wi ndows.h>
#defi ne TRUE 1
#defi ne FALSE 0
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node * n ext;
p=(Node*)malloc(sizeof(Node)); p_>data=x;
p->n ext=head->n ext;
head->n ext=p;
}
else break;ຫໍສະໝຸດ Baidu
}
return 1;
return 0;
}
/*尾部插入*/
Lin kList CreatfromT(Li nkList head)
《数据结构》上机实验报告
学号:104100058
姓名:赵德刚
班级:10A
实验时间:年月日
实验地点:同析3号楼
开发环境:C++
课程名称:数据结构----C语言描述
实验性质:口综合性实验设计性实验口验证实验
实验内容:单链表的实现
题目来源:教材页题口 "教师补充口自选题
目
主要功能描述:链表的初始化、链表的创建(头部插入法、尾部插入法)、求表长、查找(按值查找、按序号查找)、
表长:从表头开始,将指针依次指向各个结点,一直到p->next-NULL为止,用j来计数。
查找:
(1)按值查找:在表中查找第i个结点,找到就返回该结点的存储位置,用j来存储扫描过的结点数(j的初值为
0),但j=i时,结束。
(2)按序号查找:从表中第一个结点开始,当key等于查找到的元素的数据时停止查找。
程序及运行结果正误判断:口非常好正确,还可改进口基本正确,还需改进口还有错误
不足之处或设计经验小结:
(1)L是单链表的头指针的指针,用来接收头指针变量的地址,*L待初始化的单链表为头指针变量;
(2)节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;
(3)头插法建表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;
{
Lin kList p,q,t;
ElemType x;
q=head;t=head;
puts("输入数据,输入-1000结束输入r?;
while(1)
{
sca nf("%d", &x);
if(x!=-1000)
{
p=(Node*)malloc(sizeof(Node)); p->data=x;
p-> next=NULL;
t_>n ext=p;
t=p;
}
}
return q;
}
int In slist(L in kList *head,i nt i,ElemType x)
{
Lin kList p,q;
p=(*head);
int j=0;
while(p&&j<i-1)
{
p=p->n ext;
j++;
}
if(!p||j>i-1)
int x,i;
h=(Node*)malloc(sizeof(Node));
r=h;
printf("请输入数据:\n”);
for(i=1;i<=n ;i++)
{
sca nf("%d", &x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->n ext=p;
r=p;
插入:在单链表中第i-1个结点并由指针指示,申请结点空间q,将数据域置为x,更新指针。
删除:从头结点开始,删除第i个结点并释放空间;
输出:当表不为空时,依次输出表中元素;
合并:与顺序表一样,只需为新的结点申请一个空间。
典型测试数据输入:输入数据个数:4
数据:1,2,3,4
输出:1,2,3,4
预期结果:基本实现了单链表的基本 各种操作。
Lin kList p;
p=head->n ext;
while(p!=NULL)
{
prin tf("\n%d",p->data);
p=p->n ext;
}
prin tf("\n”);
}
/*求表长*/
int Len gthList(L in kList head)
{
int i;
Lin kList p;
(4) 求表长时,算法的时间复杂度为0(n)。
任课教师评语:
教师签字:年月日
源程序文件名及组成文件:#in clude<stdio.h>,# in clude<stdlib.h>,# in clude<co nio.h>,#i nclude<wi ndows.h>
①算法设计思想②算法描述
#in clude<stdio.h>
i=0;
p=head->n ext;
while(p!=NULL)
{
i++;
p=p->n ext;
}
return i;
}
/*查找*/
int Locate1(L in kList head,ElemType x)
{
Lin kList p;
插入、删除、输出、两个有序单链表的合并等。
设计分析:
初始化:为单链表申请头结点空间,将单链表设置为空;创建:(1)头部插入法:(a)初始化空表;(b)申请新结
点并赋值;(c)插入新结点;(d)插入第i个元素。
(2)尾部插入法:
⑻建空表(b)申请结点并赋值;(c)插入第一个结点;(d)r->next-s,r-s;
}Node,*Li nkList;
/*初始化*/
void In it(Li nkList *head)
{
*head=(L in kList)malloc(sizeof(Node));
(*head)-> next=NULL;
}
Lin kList create(i nt n)
{
Lin kList h,r,p;
printf("插入位置不合法!"); return 0;
}
q=(Node*)malloc(sizeof(Node));
q->data=x;
q->n ext=p->n ext; p_>n ext=q;
return 1;
}
//输出
void Output(L in kList head)
{
/*定义节点指针类型,并指向首元结点*/
}
r->n ext=NULL;
return h;
}
/*头部插入*/
int CreatfromH(L in kList head)
{
Lin kList p;
ElemType x;
puts("输入数据,输入-1000结束输入!");
while(1)
{
sca nf("%d", &x);
if(x!=-1000)
#in clude<stdlib.h>
#in clude<c oni o.h>
#i nclude<wi ndows.h>
#defi ne TRUE 1
#defi ne FALSE 0
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node * n ext;
p=(Node*)malloc(sizeof(Node)); p_>data=x;
p->n ext=head->n ext;
head->n ext=p;
}
else break;ຫໍສະໝຸດ Baidu
}
return 1;
return 0;
}
/*尾部插入*/
Lin kList CreatfromT(Li nkList head)
《数据结构》上机实验报告
学号:104100058
姓名:赵德刚
班级:10A
实验时间:年月日
实验地点:同析3号楼
开发环境:C++
课程名称:数据结构----C语言描述
实验性质:口综合性实验设计性实验口验证实验
实验内容:单链表的实现
题目来源:教材页题口 "教师补充口自选题
目
主要功能描述:链表的初始化、链表的创建(头部插入法、尾部插入法)、求表长、查找(按值查找、按序号查找)、
表长:从表头开始,将指针依次指向各个结点,一直到p->next-NULL为止,用j来计数。
查找:
(1)按值查找:在表中查找第i个结点,找到就返回该结点的存储位置,用j来存储扫描过的结点数(j的初值为
0),但j=i时,结束。
(2)按序号查找:从表中第一个结点开始,当key等于查找到的元素的数据时停止查找。
程序及运行结果正误判断:口非常好正确,还可改进口基本正确,还需改进口还有错误
不足之处或设计经验小结:
(1)L是单链表的头指针的指针,用来接收头指针变量的地址,*L待初始化的单链表为头指针变量;
(2)节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;
(3)头插法建表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;
{
Lin kList p,q,t;
ElemType x;
q=head;t=head;
puts("输入数据,输入-1000结束输入r?;
while(1)
{
sca nf("%d", &x);
if(x!=-1000)
{
p=(Node*)malloc(sizeof(Node)); p->data=x;
p-> next=NULL;
t_>n ext=p;
t=p;
}
}
return q;
}
int In slist(L in kList *head,i nt i,ElemType x)
{
Lin kList p,q;
p=(*head);
int j=0;
while(p&&j<i-1)
{
p=p->n ext;
j++;
}
if(!p||j>i-1)
int x,i;
h=(Node*)malloc(sizeof(Node));
r=h;
printf("请输入数据:\n”);
for(i=1;i<=n ;i++)
{
sca nf("%d", &x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->n ext=p;
r=p;
插入:在单链表中第i-1个结点并由指针指示,申请结点空间q,将数据域置为x,更新指针。
删除:从头结点开始,删除第i个结点并释放空间;
输出:当表不为空时,依次输出表中元素;
合并:与顺序表一样,只需为新的结点申请一个空间。
典型测试数据输入:输入数据个数:4
数据:1,2,3,4
输出:1,2,3,4
预期结果:基本实现了单链表的基本 各种操作。
Lin kList p;
p=head->n ext;
while(p!=NULL)
{
prin tf("\n%d",p->data);
p=p->n ext;
}
prin tf("\n”);
}
/*求表长*/
int Len gthList(L in kList head)
{
int i;
Lin kList p;
(4) 求表长时,算法的时间复杂度为0(n)。
任课教师评语:
教师签字:年月日
源程序文件名及组成文件:#in clude<stdio.h>,# in clude<stdlib.h>,# in clude<co nio.h>,#i nclude<wi ndows.h>
①算法设计思想②算法描述
#in clude<stdio.h>
i=0;
p=head->n ext;
while(p!=NULL)
{
i++;
p=p->n ext;
}
return i;
}
/*查找*/
int Locate1(L in kList head,ElemType x)
{
Lin kList p;
插入、删除、输出、两个有序单链表的合并等。
设计分析:
初始化:为单链表申请头结点空间,将单链表设置为空;创建:(1)头部插入法:(a)初始化空表;(b)申请新结
点并赋值;(c)插入新结点;(d)插入第i个元素。
(2)尾部插入法:
⑻建空表(b)申请结点并赋值;(c)插入第一个结点;(d)r->next-s,r-s;
}Node,*Li nkList;
/*初始化*/
void In it(Li nkList *head)
{
*head=(L in kList)malloc(sizeof(Node));
(*head)-> next=NULL;
}
Lin kList create(i nt n)
{
Lin kList h,r,p;