山东大学数据结构第二次实验实验报告Word下载.docx
《山东大学数据结构第二次实验实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构第二次实验实验报告Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
stdio.h"
stdlib.h"
malloc.h"
string.h"
typedefstructnode//定义一个栈的结构
{
intdata;
structnode*pNext;
//pNext为指向栈中下一个空间的指针
}Node,*pNode;
typedefpNodeStack;
StackInitStack();
//初始化栈
voidCreateStack(StackTop);
//生成栈
boolEmpty(StackTop);
//判断栈是否为空
voidPush(StackTop,intn);
//进行压栈操作
voidPop(StackTop);
//进行出栈操作
voidTraverseStack(StackTop);
//遍历栈的函数
voidDeleteStack(StackTop);
//清空栈的函数
intmain()//主函数
{
intn;
charstr[6];
//定义数组,存储操作指令
StackTop=NULL;
//初始化Top为NULL
Top=InitStack();
CreateStack(Top);
//生成栈
TraverseStack(Top);
//遍历栈
printf("
请输入下一步操作指令(push,poporend):
"
);
while
(1)
scanf("
%s"
str);
//获取操作指令
if(strcmp(str,"
push"
)==0)
{
请输入入栈的元素:
%d"
&
n);
Push(Top,n);
//进栈操作
}
pop"
Pop(Top);
//出栈操作
end"
break;
//跳出循环
)!
=0&
&
strcmp(str,"
=0)
输入指令错误,请重新输入指令:
}
DeleteStack(Top);
//释放栈空间
return0;
}
StackInitStack()//进行栈的初始化的函数
StackTop=(Stack)malloc(sizeof(Node));
//分配内存空间给栈顶
if(Top==NULL)
动态分配内存失败\n"
exit
(1);
初始化栈成功\n"
Top->
pNext=NULL;
//栈顶指针的指向置为NULL;
returnTop;
voidCreateStack(StackTop)//生成栈
intLEN,x;
StackBottom=Top;
//令Top和Bottom指向同一空间
Bottom->
请输入想要入栈的元素个数:
LEN);
for(inti=0;
i<
LEN;
i++)
请输入第%d个元素(从栈顶到栈底):
i+1);
x);
StackpNew=(Stack)malloc(sizeof(Node));
pNew->
data=x;
//将输入的数放在栈data单元中
pNext=pNew;
//Bottom指向新分配空间的单元
//令pNew指向NULL
Bottom=pNew;
//让新分配空间的单元成为栈底
}
生成栈成功\n"
boolIsEmpty(StackTop)//判断栈是否为空
returnTop->
pNext==NULL;
voidPush(StackTop,intn)//进行进栈操作的函数
//定义一个新节点,并分配内存空间
if(pNew==NULL)
未能动态分配内存,进栈失败\n"
return;
data=n;
pNext=Top->
pNext;
voidPop(StackTop)//进行出栈操作函数
Stackp=Top->
if(IsEmpty(Top)==true)//判断栈是否为空,为空就不能进行出栈操作
栈为空,Pop失败\n"
return;
else
弹出的栈顶元素为:
%d\n"
p->
data);
//显示出栈元素
pNext=p->
free(p);
voidTraverseStack(StackTop)//遍历栈,获取栈中的数值
现在栈中的元素从栈顶到栈底依次为:
Stackp=Top->
if(p==NULL)printf("
栈空"
while(p!
=NULL)
%d"
p=p->
\n"
voidDeleteStack(StackTop)//释放栈空间
Stackp,q;
p=Top->
while(p!
=NULL)
{
q=p->
free(p);
p=q;
pNext=NULL;
实验结果:
1)生成栈
①初始化栈。
②生成栈成功。
输入push,进行入栈操作,得到新的栈序列。
3)Pop
①输入pop,进行出栈操作,弹出栈顶元素9,并且得到新的栈序列。
②如果不断进行pop操作,当栈为空时会出现pop失败。
4)其余操作
①结束进程
输入指令end可以结束进程,不会出现要求输入下一步指令。
②输入错误的指令
若在指令输出端输入错误指令,则要求重新输入指令直到输入正确指令
2.队列(循环数组实现)
#definemaxsize11
typedefstructpQueue
intqueue[maxsize];
intrear;
//最后元素的位置
intfront;
//最前元素的位置的前一个位置
}Aqueue,*Queue;
QueueQueueInit();
//初始化队列
voidCreateQueue(QueueQ,intn);
//生成队列
intIsFull(QueueQ);
//判断队列是否为满
intIsEmpty(QueueQ);
//判断队列是否为空
intEnQueue(QueueQ,intx);
//入队
intDeQueue(QueueQ);
//出队
voidTraverseQueue(QueueQ);
//遍历队列
intn,x;
charstr[10];
QueueQ=QueueInit();
请输入想要入队元素个数(小于%d):
maxsize);
while
(1)
if(n<
maxsize)break;
请重新输入想要入队元素个数(小于%d):
CreateQueue(Q,n);
队列中的元素依次为:
TraverseQueue(Q);
请输入下一步操作指令(Enqueue,Dequeueorend):
Enqueue"
请输入想要入队的元素:
if(EnQueue(Q,x))//入队
元素%d入队后队列中元素依次为:
x);
Dequeue"
if(IsEmpty(Q)==0)
元素%d出队后队列中元素依次为:
DeQueue(Q));
//出队
else
队列为空,出队失败\n"
st