#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>
//顺序栈
typedef int Position;
typedef int ElementType;
typedef struct SNode *PtrToSNode;
struct SNode {
ElementType *Data;//存储元素的数组
Position Top;//栈顶指针
int MaxSize;// 堆栈最大容量
};
typedef PtrToSNode Stack;
//1.创建
//创建一个给定容量的空堆栈
Stack CreateStack(int MaxSize)
{
Stack S=(Stack) malloc(sizeof(struct SNode));
S->Data =(ElementType *)malloc(sizeof(ElementType)*MaxSize);
S->Top =-1;
S->MaxSize =MaxSize;
return S;
}
//入栈push
/*
判断栈是否满,若不满,top+1,将新元素放入数组的top位置
*/
bool IsFull(Stack S)
{
return (S->Top ==S->MaxSize -1);
//满了返回true
}
bool Push(Stack S,ElementType X)
{
if(IsFull(S)){
printf("栈满\n");
return false;
}else {
S->Data [++(S->Top)]=X;//先+
return true;
}
}
//出栈pop
/*
判断栈是否为空
若不空,返回Data[Top],将top-1
否则返回一个ElementType类型的错误标志
*/
bool IsEmpty(Stack S)
{
return (S->Top ==-1);
//为空返回true
}
#define ERROR -1//ERROR为栈元素不可能取到的值
ElementType Pop(Stack S)
{
if(IsEmpty(S)){
printf("栈空\n");
return ERROR;
}else
return S->Data [(S->Top) --];
}
int main()
{
printf("请输入栈的大小: \n");
int MaxSize,X,i;
scanf("%d",&MaxSize);
Stack S=CreateStack(MaxSize);
printf("请输入非%d的数据: \n",ERROR);
for(i=0;i<MaxSize;i++){
scanf("%d",&X);
Push(S,X);
}
int p;
printf("出栈: \n");
for(i=0;i<MaxSize;i++){
p=Pop(S);
printf("%d ",p);
}
return 0;
}
运行:
![](https://img-blog.csdnimg.cn/img_convert/62a859ecb9c12bfe1c386de599267d92.png)