数据结构第四次实验
编写一个程序实现顺序栈的各种基本运算.
(1) 初始化顺序栈
(2) 判断栈空
(3) 判断栈满
(4)入栈
(5) 遍历顺序栈
(6) 出栈
(7) 取栈顶元素.
注意: 对顺序栈的操作主要是对栈顶指针和以栈顶指针为下标的数组的操作,注意栈的状态。在入栈时栈不能为满, 出栈时栈不能为空.
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct sqstack
{
int data[MAXSIZE];
int top;
}sqstack; //顺序栈结构体定义
//顺序栈的初始化算法
void initseqstack(sqstack &st)
{st.top ==-1;
}
//顺序栈判空算法
int emptystack(sqstack st)
{if(st.top ==-1)
return 1;
else
return 0;
}
//顺序栈栈满算法
int stackfull(sqstack &st)
{if(st.top ==MAXSIZE-1)
return 1;
else
return 0;
}
//取顺序栈栈顶元素算法
int get_top(sqstack st)
{int x;
if(emptystack(st)){
printf("empty");
}
else
{x=st.data[st.top];
}
return x;}
//顺序栈入栈操作算法
void push(sqstack &st,int e)
{ if(stackfull(st)){
printf("full");
}
else
{st.top ++;
st.data [st.top]=e;
}
}
//顺序栈出栈算法
void pop(sqstack &st)
{if(emptystack(st)){
printf("empty");
}
else
{printf("%3d",st.data[st.top]);
st.top --;
}
}
//顺序栈创建算法
void createstack(sqstack &st)
{int i,n;
printf("输入N个整数:");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&st.data[i]);//忘加&取地址
}
st.top=n-1;
}
//顺序栈显示算法
void display(sqstack st)
{int i;
if(emptystack(st)){
printf("empty");
}
else
for(i=st.top;i>=0;i--){
printf("%3d",st.data [i]);
}
}
main()
{ int x;
sqstack s;
printf("初始化一个栈\n");
initseqstack(s);
createstack(s);
printf("\n");
display(s);
printf("\n");
printf("请输入需要入栈的元素值:");
scanf("%d",&x);
push(s,x);
printf("\n");
display( s);
printf("调用出栈算法");
pop(s);
printf("\n");
display( s);
}