数据结构实验报告代码Word文件下载.docx
- 文档编号:14110208
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:33
- 大小:234.66KB
数据结构实验报告代码Word文件下载.docx
《数据结构实验报告代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告代码Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
五、分析与讨论
对上机实践结果进行分析,上机的心得体会。
六、教师评语
签名:
日期:
成绩
附源程序清单:
实验要求
编程实现如下功能:
(1)按照输入的栈中元素个数n和各元素值成立一个顺序栈,并输出栈中各元素值。
(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。
(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。
2.实验相关原理:
栈是一种插入和删除操作都限制在表的一端进行的特殊线性表,它的操作具有“先进后出”的特性。
采用顺序存储结构的栈称为顺序栈。
栈的存储结构描述如下:
#defineMAXSIZE100;
/*顺序栈的最大长度*/
typedefstruct
{Selemtypebase[MAXSIZE];
/*存储栈中数据元素的数组*/
inttop;
/*top为栈顶指针,它指示栈顶元素的存储空间的下一个存储单元*/
}Sqstack;
【核心算法提示】
1.顺序栈入栈操作的大体步骤:
第一判断顺序栈是不是为满,若是满,则函数返回ERROR,不然将待入栈的数据元素寄存在top所指示的存储单元中,再使top后移一个存储单元位置,即将top值加1,最后函数返回OK。
2.顺序栈出栈操作的大体步骤:
第一判断顺序栈是不是为空,若是空,则函数返回ERROR,不然将栈顶指针前移一个存储单元位置,即将top值减1,再将top所指示的栈顶元素用e返回其值,并使函数返回OK。
【核心算法描述】
statusPush(Sqstack&
S,Selemtypee)
/*将数据元素e压入到顺序栈S中,使其成为新的栈项元素*/
{if>
=MAXSIZE)/*若是栈满,则函数返回ERROR*/
returnERROR;
[++]=e;
/*将新元素e寄存在top所指示的存储单元中,并使top值加1*/
returnOK;
}
statusPop(Sqstack&
S,Selemtype&
e)
/*将顺序栈S中的栈顶元素从栈中删除,并用e返回其值*/
{if==0)/*若是栈空,则函数返回ERROR*/
ReturnERROR;
e=[];
/*将top值减1,并用e保留top所指示的栈顶元素值*/
3.源程序代码参考
#defineMAXSIZE100
typedefstruct
{intbase[MAXSIZE];
/*top指示存储栈顶元素的下一存储单元*/
/*顺序栈的类型概念*/
SqstackPush(SqstackS,inte)/*顺序栈的入栈操作函数*/
=MAXSIZE)
printf("
StackisOverflow\n"
);
else
[++]=e;
returnS;
SqstackPop(SqstackS,int*e)/*顺序栈的出栈操作函数*/
{if==0)
StackisEmpty\n"
*e=[];
voidStack_display(SqstackS)/*顺序栈的输出函数*/
{inti;
for(i=0;
i<
;
i++)/*依次输出栈中各元素的值,栈顶元素在表的尾部*/
%4d"
[i]);
\n"
main()
{SqstackS;
inti,j,n,x,e;
pleaseinputthelength:
"
/*请求输入顺序栈中元素个数*/
scanf("
%d"
&
n);
pleaseinputtheValue:
\n"
/*请求输入顺序栈中各个元素值*/
i<
n;
i++)
[i]);
=n;
thestackis:
Stack_display(S);
pleaseinputtheinsertnode:
/*请求输入需要入栈的新元素*/
x);
S=Push(S,x);
thestackafterpushis:
/*提示输出入栈后栈中各个元素值*/
/*挪用顺序栈的输出函数*/
S=Pop(S,&
e);
thepopvalueis:
%d\n"
e);
/*输出出栈元素的值*/
thestackafterpopis:
/*提示输出出栈后栈中各个元素值*/
(1)按照输入的栈中元素个数和各元素值成立一个链栈,并输出链栈中各元素值,观察输入的内容与输出的内容是不是一致,特别注意栈顶元素的位置。
⑵核心算法提示
采用链式存储结构的栈称为链栈,链栈的存储结构描述如下:
typedefstructSnode
{Selemtypedata;
/*数据域*/
structSnode*next;
/*指针域*/
}SNODE,*LinkStack;
/*其中SNODE为链栈中的结点类型名,LinkStack为指向结点的指针类型名*/
若是栈中元素序列为{a1,a2,…,an},则链栈的存储结构如下图3-1所示:
从图3-1可看出,栈的链式存储结构与单链表的存储结构相同,所有在链栈上进行入栈和出栈操作与单链表上的插入和删除操作的主要步骤相同。
只不过要特别注意以下几点:
(1)链栈中无需加头结点。
(2)链栈中的指针是指向栈中元素序列的前驱结点。
(3)链栈中的入栈和出栈操作都是在链表的表头进行。
⑶核心算法描述
statusPush(LinkStack&
top,inte)
/*将数据元素e压入到链栈top中,使其成为新的栈项元素*/
{LinkStackp;
p=(LinkStack)malloc(sizeof(SNODE));
/*生成一个新的结点*/
if(!
p)/*若是分派空间失败,则函数返回"
OVERFLOW"
*/
returnOVERFLOW;
p->
data=e;
/*新结点的数据域赋值*/
next=top;
/*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/
top=p;
statusPop(LinkStack&
top,int&
e)
/*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/
{LinkStackq;
top)/*若是栈空,则函数返回ERROR*/
e=top->
data;
/*将被删的栈顶元素的值保留在e中*/
q=top;
/*用q记下待删的栈顶元素*/
top=q->
next;
/*修改链使待删结点从链中“卸下”,现在被删结点的后继成为新的栈顶元素结点*/
free(q);
/*释放被删结点的存储空间*/
}
7 实验项目名称:
串
罗维卿
1.掌握串的顺序表示和堆表示实现方法;
1、根据串的三种实现方式,顺序、堆和链,选择其中一种分别实现串赋值、串合并、删除等操作。
MaxSize100
{
chardata[MaxSize];
intlength;
}SqString;
voidStrAssign(SqString&
str,charcstr[])
inti;
cstr[i]!
='
\0'
[i]=cstr[i];
=i;
voidStrCopy(SqString&
s,SqStringt)
[i]=[i];
=;
intStrEqual(SqStrings,SqStringt)
intsame=1,i;
if!
=
same=0;
else
{
for(i=0;
if[i]!
=[i])
same=0;
returnsame;
intStrLength(SqStrings)
return;
SqStringConcat(SqStrings,SqStringt)
SqStringstr;
=+;
[+i]=[i];
returnstr;
SqStringSubStr(SqStrings,inti,intj)
intk;
=0;
if(i<
=0||i>
||j<
0||i+j-1>
cout<
<
参数错误\n"
endl;
returnstr;
for(k=i-1;
k<
i+j-1;
k++)
[k-i+1]=[k];
=j;
SqStringInsStr(SqStrings1,inti,SqStrings2)
intj;
+1)
returns1;
for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)