线性顺序栈的入栈与退栈(实验报告)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语言编写程序,提高了我的编程能力,受益匪浅。

相关文档
最新文档