实验二单链表实现.docx
- 文档编号:1118167
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:21
- 大小:48.29KB
实验二单链表实现.docx
《实验二单链表实现.docx》由会员分享,可在线阅读,更多相关《实验二单链表实现.docx(21页珍藏版)》请在冰豆网上搜索。
实验二单链表实现
实验报告
课程名称数据结构课程设计
实验项目单链表的实现
实验仪器PC机一台
学院_____信息管理学院_______
专业电子商务
班级/学号___电子商务1401______
学生____________
实验日期___12.27_______
成绩_______________________
指导教师_________________
信息科技大学
信息管理学院
(课程上机)实验报告
实验课程名称:
数据结构课程设计专业:
电子商务班级:
商务1401
学号:
:
成绩:
实验名称
单链表的实现
实验地点
小营学院机房
实验时间
12.29
1.实验目的:
1)理解线性表的逻辑特点;
2)掌握单链表的定义及C语言实现;
3)熟练掌握在单链表中实现各种基本操作;
4)掌握使用单链表解决一些简单应用问题的编程。
2.实验要求:
1)学时为4学时;
2)在上机前完成源程序;
3)能在机器上正确、调试运行程序;
4)本实验需提交实验报告;
5)实验报告文件命名方法:
实验2_xx班_学号后两位_.doc
3.实验容和步骤:
1)基于单链表实现线性表的以下操作:
a)在表头插入元素
b)在表尾插入元素
c)在指定的位置i插入元素
d)删除操作
e)查找元素
f)求表长度
g)清空操作
h)判断线性表是否为空
i)按位序打印线性表中的元素
2)单链表的简单应用:
a)调用基本操作编写算法删除第i个开始的k个元素;
b)计算单链表中值为x的元素的个数;
c)将x插入到单链表的适当位置上,以保持单链表中元素的有序性;
d)将线性表元素进行就地逆置
e)将两个单链表合并为一个单链表。
4.实验过程:
1)基于单链表实现线性表的以下操作:
在表头插入元素
intInsert_First(LinkList*Head_pointer,ElemTypex)
{
Node*p;
P=(LinkList)malloc(sizeof(Node));
if(p==NULL)
returnOverFlow;
p->data=x;
p->next=*Head_pointer;
*Head_pointer=p;
ReturnOK;
}
在表尾插入元素
intInsert_Last(LinkList*Head_pointer,ElemTypex)
{
Node*p,*q;
P=(LinkList)malloc(sizeof(Node));
if(p==NULL)
returnOverFlow;
p->data=x;
p->next=NULL;
q=*Head_pointer;
if(q==NULL)
*Head_pointer=p;
else
{while(q->next!
=NULL)
q=q->next;
q->next=p;
}
ReturnOK;
}
在指定的位置i插入元素
intInsert_i(LinkList*Head_pointer,ElemTypex,inti)
Node*p,*q;
P=(LinkList)malloc(sizeof(Node));
if(p==NULL)
returnOverFlow;
p->data=x;
if(i==0)
{p->next=*Head_pointer;
*Head_pointer=p;
returnOK;
}
else
{q=*Head_pointer;
while(q->next!
=NULL&&i>1)
{q=q->next;i--;}
if(q!
=NULL)
p->next=q->next;
q->next=p;
returnOK;
}
returnError;
}
}
删除操作
intDelete_LinkList(LinkList*Head_pointer,ElemTypex)
Node*p,*q;
p=*Head_pointer;
if(p->data==x)
{*Head_pointer=(*Head_pointer)->next;
free(p);
returnOK;
}
q=p;p=p->next;
}
}
returnError;
}
查找元素
LinkListLocation_LinkList(LinkListHead,ElemTypex)
{LinkListp;
p=Head;
while(p!
=NULL)
{if(p->data==x)break;
p=p->next;
}
returnp;
}
求表长度
intLength_LinkList(LinkListHead)
{Node*p;
intsum=0;
p=Head;
while(p!
=NULL)
{sum++;
p=p->next;
}
returnsum;
}
清空操作
voidSetNull_LinkList(LinkList*Head_pointer)
{Node*p,*q;
p=*Head_pointer;
while(p!
=NULL)
q=p;
p=p->next;
free(q);
}
*Head_pointer=NULL;
}
判断线性表是否为空
voidIfNull_LinkList(LinkList*Head_pointer)
{if(*Head_pointer==NULL)
returnTrue;
elsereturnFalse;
}
按位序打印线性表中的元素
voidShow_LinkList(LinkListHead)
{Node*p;
printf("\n");
p=Head;
if(p==NULL)
printf("\n空表!
");
while(p!
=NULL)
{printf("%d",p->data);
p=p->next;
}
}
2)单链表的简单应用:
调用基本操作编写算法删除第i个开始的k个元素;
计算单链表中值为x的元素的个数;
将x插入到单链表的适当位置上,以保持单链表中元素的有序性;
将线性表元素进行就地逆置
将两个单链表合并为一个单链表。
1.调用基本操作编写算法删除第i个开始的k个元素;
#include"stdio.h"
#include"stdlib.h"
typedefstructnode
{
intdata;
structnode*next;
}Node,*LinkList;
voidDelete_LinkList(LinkList*Head_pointer,inti,intk)
{
intj=i+k-1;
Node*p,*q,*m,*n;
q=*Head_pointer;
while(q->next!
=NULL&&i>1)
{n=q;q=q->next;i--;}
p=*Head_pointer;
while(p->next!
=NULL&&j>1)
{p=p->next;j--;}
while(q!
=p)
{
m=q;
q=q->next;
free(m);
}
n->next=p->next;
free(p);
}
intinsert_First(LinkList*Head_pointer,intx)
{
Node*p;
p=(LinkList)malloc(sizeof(Node));
if(p==NULL)
return-1;
p->data=x;
p->next=*Head_pointer;
*Head_pointer=p;
return1;
}
voidShow_LinkList(LinkListHead)
{
Node*p;
printf("\n");
p=Head;
if(p==NULL)
printf("\nNULL");
while(p!
=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
intmain()
{
intm;
inti,k;
LinkListHead;
Head=NULL;
scanf("%d%d",&i,&k);
for(m=0;m<7;m++)
if(!
insert_First(&Head,m))
break;
Show_LinkList(Head);
Delete_LinkList(&Head,i,k);
Show_LinkList(Head);
return0;
}
2.计算单链表中值为x的元素的个数
#include"stdio.h"
#include"stdlib.h"
typedefstructnode
{
intdata;
structnode*next;
}Node,*LinkList;
intLocation_LinkList(LinkListHead,intx)
{
Node*p;
intsum=0;
p=Head;
while(p!
=NULL)
{
if(p->data==x)
sum++;
p=p->next;
}
returnsum;
}
intinsert_First(LinkList*Head_pointer,intx)
{
Node*p;
p=(LinkList)malloc(sizeof(Node));
if(p==NULL)
return-1;
p->data=x;
p->next=*Head_pointer;
*Head_pointer=p;
return1;
}
voidShow_LinkList(LinkListHead)
{
Node*p;
printf("\n");
p=Head;
if(p==NULL)
printf("\nNULL");
while(p!
=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
intmain()
{
intm,x,sum;
LinkListHead;
Head=NULL;
scanf("%d",&x);
for(m=0;m<7;m++)
if(!
insert_First(&Head,m))
break;
Show_LinkList(Head);
sum=Location_LinkList(Head,x);
printf("%d\n",sum);
return0;
}
3.将x插入到单链表的适当位置上,以保持单链表中元素的有序性
#include"stdio.h"
#include"stdlib.h"
typedefstructnode
{
intdata;
structnode*next;
}Node,*LinkList;
intLocation_LinkList(LinkListHead,intx)
{
Node*p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 二单链表 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)