问题补充说明:1、掌握顺序栈的定义、特点及常见算法。2、掌握链式栈的定义、特点及常见算法。3、参照给定栈的程序样例,验证给出的栈的常见算法。4、提交实验报告,报告内容包括:目的、要求、算法... 1、 掌握顺序栈的定义、特点及常见算法。 2、 掌握链式栈的定义、特点及常见算法。 3、 参照给定栈的程序样例,验证给出的栈的常见算法。 4、 提交实验报告,报告内容包括:目的、要求、算法 述、程序结构、主要变 说明、程序清单、调试情况、设计技巧、心得体会等。 三、 实验内容: 1、 顺序栈的操作和测试:设计一个主函数实现对顺序栈进行操作测试。测试方法为:依次把数据元素1,3,5,7,9入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。 2、 链式栈的操作:设计一个主函数实现对链式栈进行操作测试。测试方法为:依次把数据元素3,6,9,12,15入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。 3、 栈的应用:利用顺序栈求解表达式(a+b)*(c-d)的值(可预先把常规表达式转换为后缀表达式格式)。四、程序要求: 1、 顺序栈的长度自行确定。 2、 重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、 写出完整的程序并能调试通过。 展开
#include
#include
#defineMax100
typedefcharT;
typedefstructMyStack
{
Taa[Max];
unsignedintp;
}stack;
//创建空栈
stack*createEmptyStack()
{
stack*st=轮列众零半木六翻留慢(stack*)malloc(sizeof(stack));
inti=0;
for(i=0;i<Max;i++)
st->aa[i]=0;
st->p=0;
retur械告此溶百扬引权卫nst;
};
//栈判空
intisEmpty(conststack*st)
{
if来自(st->p==0)return1;
elsereturn0;
};
//求栈的大小
unsignedintsize(conststack*st)
{
returnst->p;
};
//push操作
voidpush(st资让粉医课青一接ack*st,constTa)
{
st->p=st->p+1;
if(st->p==Max)
{
printf("栈满\n");
st->p--;
return;
}
st->aa[st->p]=a;
};
//pop凯求华物或士管胡关千操作
Tpop(stack*st)
{
if(isEmpty兴况较聚高尽益张(st))
{
printf("栈空");
r360问答eturnNULL;
}
chart=st->aa[st->p];
st->p=st->p-1;
printf("%c",t);
returnt;
};
//栈销毁
voiddestroy(stack*st)
{
free(st);
};
intmain()
亮伯班确{
stack*st=createEmptyStack();
if(isEmpty(st))printf("MyStackisempt转y\n");
elseprintf("MyStackisnotempty\n");
push愿史牛火杆(st,'a')全百劳够团加呀量轻;
push(st,'b');
push(官运均st,'c');
push(st,'d');
push(st,'e');
printf("%d\n",si激ze(st));
while(!isEmpty(st市因械将笑案利调息啊兵))pop(st);
des波troy(st);
system("pause");
r教广与染尽还eturn0;
}
标签:语言