引入外部文件和初始条件
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
顺序栈的存储结构:须有一个一维数组去存放栈中的基本元素,还要栈顶指针,用来存放栈顶元素的下标
typedef struct SqStack{
int elem[MAXSIZE];
int top;
}SqStack,*stack_type;
结构如下
接着开始栈的初始化
stack_type Init_SqStack()
{
//创建一个顺序栈,返回一个指向顺序栈的指针,为0表示分配空间失败
SqStack *S;
S=(stack_type)malloc(sizeof(SqStack));
if(S)
{
S->top=-1;
printf("置空栈成功!\n");
}
return S;
}
判断栈是否为空
//判断栈是否为空,空表示0,非空表示1
int Empty_Stack(stack_type S)
{
if(S->top==-2)
return 0;
else
return 1;
}
往栈中插入元素
//往栈顶插入元素x,返回1表示插入成功,返回0表示插入失败
int Push_SqStack(stack_type S)
{
if(S->top==MAXSIZE-1)
{
printf("栈已经满了!\n");
return 0;
}
else
printf("请输入需要入栈的个数:");
if(S->top<0)
{
//栈的初始化数据入栈,一次性输入多个元素
int n;
scanf("%d",&n);
printf("请依次输入需要入栈的元素:\n");
while(S->top<n-1)
{
S->top++;
scanf("%d",&S->elem[S->top]);
}
}else{
//栈的后期数据输入,一个一个入栈
printf("请插入你要入栈的元素:");
S->top++;
scanf("%d",&S->elem[S->top]);
}
printf("push the elements success!\n");
return 1;
}
出栈操作:
//删除栈顶元素并保存在向量x中,返回1表示出栈成功
int Pop_Stack(stack_type S,int *tmp)
{
if(!Empty_Stack(S))
{
printf("栈是空的!\n");
return 0;
}
else{
*tmp=S->elem[S->top];
S->top--;
return 1;
}
}
获取栈顶元素
//取得栈顶元素
int getTop_SqStack(stack_type S,int *data)
{
if(!Empty_Stack(S))
{
printf("这是一个空栈!\n");
return 0;
}else{
*data=S->elem[S->top];
return 1;
}
}
栈中元素的打印
void print_stack(stack_type s)
{
int i=s->top;
for(;i>=0;i--)
printf("%d ",s->elem[i]);
printf("\n");
}
主程序如下
void main()
{
int select,data,k;
stack_type s;
printf("\n*************************\n");
printf("*****1、栈的初始化*********\n");
printf("*****2、数据入栈***********\n");
printf("*****3、数据出栈***********\n");
printf("*****5、栈的打印***********\n");
printf("*****6、退出***************\n");
printf("***************************\n");
printf("请选择相应的操作\n");
scanf("%d",&select);
while(select)
{
switch(select)
{
case 1:s=Init_SqStack();break;
case 2:Push_SqStack(s);break;
case 3:Pop_Stack(s,&data);
printf("出栈的元素为:%d\n",data);
break;
case 4:k=getTop_SqStack(s,&data);
if(k)
printf("栈顶元素是%d\n",data);
break;
case 5:print_stack(s);
break;
case 6:exit(0);
}
printf("请选择相应的选项\n");
scanf("%d",&select);
}
}
程序截图如下: