- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单链表的定及基本操作
单链表的定义及基本操作
一、实验目的、意义
(1)理解线性表中带头结点单链表的定义和逻辑图表示方法。
(2)熟练掌握单链表的插入,删除和查询算法的设计与实现。
(3)根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
二、实验内容及要求
说明1:本次实验中的链表结构均为带头结点的单链表。
说明2: 学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。
具体要求:
建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、有哪些信誉好的足球投注网站结点。
三、实验所涉及的知识点
数据结构、C语言语法函数、结构体类型指针、单链表(建表、初始化链表、求表长、插入、删除、查询算法)等。
四、实验结果及分析
(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)
五、总结与体会
(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)
调试程序时,出现了许多错误。如:结构体类型指针出错,忽略了释放存储空间,对头插法建表、尾插法建表不熟悉等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。
六、程序清单(包含注释)
//单链表
#includestdio.h
#includemalloc.h
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
//线性表的单链表的存储结构
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//LinkList为结构体类型的指针,可以直接定义变量,比如LinkList p;
//建表(头插法)
void CreatListF(LinkList L,ElemType a[],int n)
{
//初始化线性表
L=(LinkList)malloc(sizeof(LNode));//分配内存空间
L-next=NULL;
//在表中插入元素
LinkList S;
int i;
//头插法
for(i=0;in;i++)
{
S=(LinkList)malloc(sizeof(LNode));//生成新结点
S-data=a[i];//数据域
S-next=L-next;
L-next=S;
}
}
//建表(尾插法)
void CreatListR(LinkList L,ElemType a[],int n)
{
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
LinkList p;
p=L;
LinkList S;
int i;
//尾插法
for(i=0;in;i++)
{
S=(LinkList)malloc(sizeof(LNode));
S-data=a[i];
p-next=S;
p=S;
}
p-next=NULL;
}
//初始化线性表
void InitList(LinkList L)
{
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
}
//获得链表元素
Status GetElem(LinkList L,int i,ElemType e)
{
//L为带头结点的单链表的头指针
LinkList p;
int j;
//初始化,p指向第一个结点
p=L-next;
//j为计数器
j=1;
//顺指针往后查找,直到p指向第i个元素或p为空
while(p ji)
{
p=p-next;
j++;
}
//第i个元素不存在
if(!p || ji)
return ERROR;
//取第i个元素
e=p-data;
return OK;
}
//插入
Status ListInsert(LinkList L,int i,ElemType e)
{
int j=0;
LinkList p;
p=L;
while(p!=NULL ji-1)//找第i-1个结点
文档评论(0)