数据结构实验二.docx
《数据结构实验二.docx》由会员分享,可在线阅读,更多相关《数据结构实验二.docx(6页珍藏版)》请在冰豆网上搜索。
数据结构实验二
数据结构实验二
实验二堆栈的实现与应用
一、实验目的
掌握堆栈的基本操作和设计数据测试功能的方法
二、实验要求
1)编写一个将顺序堆栈S中所有数据元素均删去的算法
voidClearStack(SeqStack*S),并说明参数S为何要设计为指针参数。
2)编写一个返回顺序堆栈S中结点个数的算法
intStackSize(SeqStackS),并说明参数S为何不用设计为指针类型。
三、实验仪器设备及软件
HPD538、C语言
四、实验原理
顺序堆栈的入栈和出栈操作只能对当前栈顶数据元素。
五、实验步骤及程序
(1)初始化StackInitiate(S)
(2)非空否StackNotEmpty(S)
(3)入栈StackPush(SeqStack*S,DataTypex)
(4)出栈StackPop(SeqStack*S,DataType*d)
(5)取栈顶数据元素StackTTop(SeqStack*s,DataType*)
上述实现顺序堆栈操作的所有函数中,都没有循环语句,所以顺序循环堆栈的所有操作的似箭复杂度均为1.
六、实验结果与分析
试验程序如下
#include
#include
#defineMAX20
typedefstruct
{
intelement[MAX];
intindex;
}Stack;
voidClearStack(Stack*S)
{
S->index=0;
}
intStackSize(StackS)//因为未改动堆栈的数据,所以不用设置为指针
{
returnS.index;
}
intInitStack(Stack*s)
{
s->index=0;
return1;
}
intIsFull(Stack*s)
{
if(s->index==MAX)
{
return1;
}
else
{
return0;
}
}
intIsEmty(Stack*s)
{
if(s->index==0)
{
return1;
}
else
{
return0;
}
}
intPush(Stack*s,intelements)
{
if(IsFull(s))
{
return0;
}
else
{
s->element[s->index]=elements;
s->index++;
return1;
}
}
intPop(Stack*s,int*elements)
{
if(IsEmty(s))
{
return0;
}
else
{
s->index--;
*elements=s->element[s->index];
return1;
}
}
intmain()
{
Stack*p;
intelement=0;
p=(Stack*)malloc(sizeof(Stack));
InitStack(p);
for(inti=0;i<21;i++)
{
if(!
Push(p,i))
{
printf("StackisFull\n");
break;
}else
{
printf("%dPushtostack\n",i+1);
}
}
printf("栈中元素个数:
%d\n",StackSize(*p));
ClearStack(p);
printf("清堆栈之后栈中元素个数:
%d\n",StackSize(*p));
}
实验结果如图
总结:
1:
该程序实现了数据元素的顺序入栈并把所有数据元素均删去的算法。
2在编程序时,把最大数据元素定为20,可以看出,当数据元素个数小于20时,可以正常顺序入栈出栈,但当数据元素个数超过20时,会显示“StackisFull”,并且只能将20个数据元素入栈。
3通过编写程序,加深了自己对顺序堆栈的理解,特别是数据显示的结果,是自己印象很深刻,同时学会了软件的基本操作。