数据结构实验指导书Word文档下载推荐.docx
- 文档编号:17344973
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:58
- 大小:31.58KB
数据结构实验指导书Word文档下载推荐.docx
《数据结构实验指导书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书Word文档下载推荐.docx(58页珍藏版)》请在冰豆网上搜索。
//线性表中数组元素
intlast;
}SeqList;
/*************************************************************************
*
*函数名称:
*Init_SeqList()
*参数:
*无
*返回值:
指向线性表的指针
*说明:
*该函数用于创建顺序储存结构的空线性表
***************************************************************************/
SeqList*Init_SeqList()
SeqList*L;
L=newSeqList;
if(L!
=NULL)
{
L->
last=-1;
returnL;
}
else
returnNULL;
}
*Insert_SeqList()
*SeqList*L:
指向线性表的指针;
inti:
插入位置;
intx:
插入新元素数据
插入成功:
true
插入失败:
false
*该函数用于在顺序储存结构的线性表插入一个新元素
***************************************************************************
boolInsert_SeqList(SeqList*L,inti,intx)
intj;
if(L->
last==MAXSIZE-1)//表已经满
cout<
<
"
Thelistisfull!
endl;
returnfalse;
if(i<
1||i>
L->
last+2)//插入位置不合法
Thepositioninsertedisinvaild!
;
for(j=L->
last;
j>
=i-1;
j--)//从最后一个元素开始到第i个元素全部后移1个位置
data[j+1]=L->
data[j];
L->
data[i-1]=x;
//在第i个位置插入新元素
last++;
//表长加1
returntrue;
*Create_SeqList()
*SeqList*L:
stringfileName;
存放数据元素的文本文件名
成功:
失败:
*该函数调用插入函数从一个文本文件中读入数据元素创建一个顺序表
boolCreate_SeqList(SeqList*L,char*filename)
FILE*fin;
intdata;
inti=0;
boolret=true;
boolfinished=false;
if((fin=fopen(filename,"
r"
))==NULL)
return(NULL);
while(!
finished)
fscanf(fin,"
%d"
&
data);
if(data!
=-1)
{
i++;
ret=Insert_SeqList(L,i,data);
}
else
finished=true;
returnret;
*Delete_SeqList()
inti;
线性表中元素位置
*该函数从顺序表中删除第i个位置上的元素
boolDelete_SeqList(SeqList*L,inti)
intj=0;
boolret;
last==-1)
Thelistisempty!
last+1)//删除位置不合法
Thepositiondeletedisinvaild!
ret=false;
for(j=i;
j<
=L->
j++)
L->
data[j-1]=L->
last--;
ret=true;
voidOutPutList(SeqList*L)
inti;
for(i=0;
i<
=L->
i++)
cout<
data[i]<
"
voidmain()
SeqList*L;
L=Init_SeqList();
if(L!
=NULL)
Create_SeqList(L,"
in.txt"
);
OutPutList(L);
Delete_SeqList(L,2);
Insert_SeqList(L,5,100);
五、程序运行情况
在源程序所在文件夹下创建一个名称为in.txt的文本文件,输入数据如下:
12345678-1作为线性表中的数据元素,其中-1表示输入数据元素的结束。
六、实验总结
(1)
(2)
(3)
实验二、线性表的链式存储及其操作
七、实验目的
(2)掌握线性表链式存储结构基本运算。
(3)掌握链式表的创建、插入、删除和显示线性表中元素等基本操作。
八、实验内容
1.创建链式存储结构的线性表
2.线性表在链式存储结构上的插入元素,删除元素运算
九、实验要求
4.C++/C完成算法设计和程序设计并上机调试通过。
5.撰写实验报告,提供实验结果和数据。
6.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
一十、程序实现
一十一、程序运行情况
//定义单链表结点类型
typedefstructlinkNode
structlinkNode*next;
}Node,*LinkList;
*outputLinkList()
*LinkListL:
指向单链表的头指针;
无
*该函数输出单链表中所有的结点信息
voidoutputLinkList(LinkListL)
Node*p;
p=L;
//指向单链表中第一个结点
printf("
当前链表中的元素值分别为:
\n"
while(p!
=NULL)//当结点存在时
printf("
%2d\t"
p->
p=p->
next;
//指向p后继结点
*Length()
单链表中结点的个数
*该函数输出单链表结点的个数
intLength(LinkListL)
intlength=0;
length++;
returnlength;
*CreateList()
*无;
指向单链表的头指针
*该函数从键盘上顺序输入若干个整数,以-1结束,从表尾建立一个不带头结点的单链表(只有头指针)
LinkListCreateList()
Node*p,*s,*head;
head=NULL;
p=head;
intfinished=0;
intx;
---输入若干个整数,以回车键结束!
如输入-1则结束整个输入!
---\n"
while(finished!
=1)//当建立未结束
输入第%d新元素:
++i);
scanf("
x);
if(x!
=-1)//判断输入是否结束
s=newNode;
s->
data=x;
if(head==NULL)//对空表单独处理
{
head=s;
}
else//对非空表单独处理
p->
next=s;
next=NULL;
p=s;
//指向最后一个结点
finished=1;
returnhead;
//返回头指针
*Node*SearchLinkList(LinkListL,inti)
*LinkListL:
指向链表的头指针
*inti:
第i个结点的编号
指向第i个结点的指针
*该函数从单链表L中查找第i个结点,并返回指向该结点的指针
Node*SearchLinkList(LinkListL,inti)
intj=1;
//p指向第一个结点
=NULL&
&
j<
i)//链表非空且还没后指向第i个结点时
//指向下一个结点
j++;
returnp;
*Node*InsertLinkList(LinkListL,inti,intx)
成功:
1
intInsertLinkList(LinkListL,inti,intx)
LinkListp,s;
p=SearchLinkList(L,i-1);
if(p==NULL)//第i个结点存在,p指向的是第i个结点的前驱结点的指针
return0;
else//新建结点并执行两步插入
{
s=newNode;
s->
next=p->
p->
return1;
}
*intDeleteLinkList(LinkListL,inti)
第i-1个结点不存在:
-1
第i个结点不存在:
intDeleteLinkList(LinkListL,inti)
//查找第i-1个结点
if(p==NULL)//第i-1个结点存在,p指向的是第i个结点的前驱结点的指针
return-1;
else
if(p->
next==NULL)//第i个结点不存在
return0;
else//删除第i个结点
s=p->
//指向第i个结点
next=s->
deletes;
s=NULL;
LinkListHead;
Head=CreateList();
//创建带头指针的单链表
outputLinkList(Head);
//输出单链表详细信息
\n单链表的长度%d\n"
Length(Head));
if(InsertLinkList(Head,4,400))//在单链表中插入一个元素
\n插入成功...!
\n插入失败...!
if(DeleteLinkList(Head,4)==1)//在单链表中删除一个元素
\n删除成功...!
\n删除失败...!
一十二、实验总结
实验三、栈的顺序存储及其实现
一、实验目的
1、掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构,以便在实际问题背景下灵活应用。
二、实验内容
1.顺序栈的存储实现
2.顺序栈的基本运算
三、实验要求
1.用C++/C完成算法设计和程序设计并上机调试通过。
2.撰写实验报告,提供实验结果和数据。
3.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
四、程序实现
写出每个操作的算法(操作过程)
程序运行情况
五、写出输入数据及运行结果
(1)源程序清单
#defineMAXLEN10
typedefstruct
intdata[MAXLEN];
inttop;
}SeqStack;
/*初始化空栈*/
SeqStack*InitSeqStack()
SeqStack*s;
s=newSeqStack;
//分配栈空间
s->
top=-1;
//置空栈
returns;
/*
将元素x入栈到栈s
*/
intPush(SeqStack*s,intx)
if(s->
top==MAXLEN-1)//栈满
else//入栈操作
top++;
data[s->
top]=x;
/*判断栈是否为空*/
intStackEmpty(SeqStack*s)
top==-1)//栈为空
/*出栈,将栈顶元素放入x所指向的存储单元中*/
intPop(SeqStack*s,int*x)
if(StackEmpty(s))//栈空
else//出栈
*x=s->
top];
top--;
s=InitSeqStack();
intchoice;
inty,x;
intz;
请选择操作类型:
1:
入栈\t2:
出栈\t3:
结束\n"
switch(x)
case1:
printf("
请输入入栈元素的值:
scanf("
y);
if(Push(s,y))
printf("
入栈成功\n"
break;
case2:
if(Pop(s,&
z))
出栈:
z);
else
出栈失败!
case-1:
(2)运行结果
六、实验总结
实验四、栈的链式存储及其实现
1、掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的链式存储结构,以便在实际问题背景下灵活应用。
1.链式栈的存储实现
2.链式栈的基本运算
typedefstructstacknode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书