链表实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一线性表的基本操作实现及其应用
一、实验目的
1、熟练掌握线性表的基本操作在两种存储结构上的实现。
2、会用线性链表解决简单的实际问题。
二、实验内容
题目一链表基本操作
该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点为结构类型,结点值为整型。单链表操作的选择以菜单形式出现,如下所示:
please input the operation:
1.初始化
2.清空
3.求链表长度
4.检查链表是否为空
5.检查链表是否为满
6.遍历链表(设为输出元素)
7.从链表中查找元素
8.从链表中查找与给定元素值相同的元素在表中的位置
9.向链表中插入元素 10. 从链表中删除元素
其他键退出。。。。。
题目二约瑟夫环问题
设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
struct node //结点结构
{
int number; /* 人的序号*/
int cipher; /* 密码*/
struct node *next; /* 指向下一个节点的指针*/
};
三.实验步骤
题目一链表基本操作
(一)、数据结构与核心算法的设计描述
1、单链表的结点类型定义
/* 定义DataType为int类型 */
typedef int DataType;
/* 单链表的结点类型 */
typedef struct LNode
{ DataType data;
}LNode,*LinkedList;
2、初始化单链表
LinkedList LinkedListInit()
{ //函数功能:对链表进行初始化参数:链表(linklist L) 成功初始化返回1,否则返回0 }
3、清空单链表
void LinkedListClear(LinkedList &L)
{//函数功能:把链表清空参数:链表(linklist L) 成功清空链表返回1 }
4、检查单链表是否为空
int LinkedListEmpty(LinkedList L)
{ //函数功能:判断链表是否为空参数:链表(linklist L) 链表为空时返回0,不为空返回1 }
5、遍历单链表
void LinkedListTraverse(LinkedList L)
{ //函数功能:遍历链表,输出每个节点的elem值参数:链表(linklist L)
通过循环逐个输出节点的elem值 }
6、求单链表的长度
int LinkedListLength(LinkedList L)
{ //函数功能:返回链表的长度参数:链表(linklist L) 函数返回链表的长度 }
7、从单链表表中查找元素
LinkedList LinkedListGet(LinkedList L,int i)
{ //函数功能:从链表中查找有无给定元素参数;链表(linklist L),给定元素(int i)
如果链表中有给定元素(i)则返回1,否则返回0 }
8、从单链表表中查找与给定元素值相同的元素在链表中的位置
LinkedList LinkedListLocate(LinkedList L, DataType x) {//函数功能:从链表中查找给定元素的位置参数;链表(linklist L),给定元素(int i)
如果链表中有给定元素i则返回元素的位置, 没有则返回0 }
9、向单链表中插入元素
void LinkedListInsert(LinkedList &L,int i,DataType x)
{ // L 为带头结点的单链表的头指针,本算法
// 在链表中第i 个结点之前插入新的元素 x
}
10、从单链表中删除元素
void LinkedListDel(LinkedList &L,DataType x)
{ 删除以 L 为头指针的单链表中第 i 个结点 }
(二)、函数调用及主函数设计
zhujiemian();
cin>>a;
do
{
switch(a)
{
case 1:
if(init(L)==1)
cout<<"成功初始化!"< else cout<<"初始化失败!"< break; case 2: if(makeempty(L)==1) cout<<"链表已清空!"< else cout<<"链表清空失败!"< break; case 3: b=getlength(L); cout<<"链表的长度为:"< break; case 4: if(isempty(L)==1) cout<<"链表不为空!"< else cout<<"链表为空!"< break; case 5: if(isfull(L)==1) cout<<"链表不满!"< else cout<<"链表已满!"< break; case 6: show(L); break; case 7: cout<<"输入您要查找的元素:"; cin>>b; if(find(L,b)==1) cout<<"链表中有该元素"< else cout<<"链表中没有您要查找的元素"< break; case 8: cout<<"您要查找的元素为:"< cin>>b; if(location(L,b)==0) cout<<"没有您要查找的元素"< else cout<<"您查找的元素"<