线性顺序栈的入栈与退栈(实验报告)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的和要求
通过对栈的编程练习,加强对栈的特点、顺序存储结构及其基本运算的理解和掌握。使用C语言根据相应算法编写一个程序,实现建栈、入栈、退栈及读栈顶元素。要求仔细阅读下面的内容,编写一个C程序,上机调试通过,并观察其结果,写出实验报告书。
二、实验内容和原理
内容:建立一个容量15的顺序栈,首先在其中压入5个元素,然后作退栈运算。
原理:
入栈:首先判断栈顶指针是否指向最后一个位置,若是,则栈满,算法结束。然后将栈顶指针进1。最后将性元素插入到栈顶指针指向的位置。
退栈:首先判断栈顶指针是否为0,若是,则栈空,算法结束。然后将栈顶指针赋给一个指定的变量,最后栈顶指针退1。
三、主要仪器设备
计算机一台
三、实验主程序
#include
#include
struct Stack{
int size;
int top;
int *stack;
};
void init(struct Stack *ps,int size)
{
ps->size=size;
ps->top=0;
ps->stack=malloc(size*sizeof(int));
}
void push(int s[],int m,int *top,int x)
{
if(*top==m) {printf("Stack overflow!\n");return;}
*top=*top+1;
s[*top-1]=x;
}
void pop(int s[],int *top,int *y)
{ if(*top==0) {printf("Stack underflow\n");return;}
*y=s[*top-1];
*top=*top-1;
}
void print(const struct Stack *ps)
{
int i;
for(i=0;i!=ps->top;++i) printf("%d ",ps->stack[i]);
}
int main(void)
{
struct Stack a;
init(&a,15);
int i,y;
push(a.stack,a.size,&a.top,99);
push(a.stack,a.size,&a.top,88);
push(a.stack,a.size,&a.top,5);
push(a.stack,a.size,&a.top,1);
push(a.stack,a.size,&a.top,55);
print(&a);
printf(“\n”);
pop(a.stack,&a.top,&y);
pop(a.stack,&a.top,&y);
pop(a.stack,&a.top,&y);
print(&a);
getchar();
return 0;
}
实验结果
五、实验心得
通过实验学习,我理解了线性顺序栈的入栈与退栈的算法,并实现了用c语言编写程序,提高了我的编程能力,受益匪浅。