C语言中对栈操作的实现
1、Stack CreateStack(int n):生成空堆栈,其最大长度为n;
2、bool IsFull(Stack s):判断堆栈S是否已满;
3、void Push(Stack s, ElementType item):将元素item压入堆栈;
4、boll IsEmpty(Stack s):判断堆栈S是否为空;
5、ElementType Pop(Stack s):删除并返回栈顶元素;
6、void Printdisplay(Stack s, int n):从栈顶开始遍历输出元素。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define ElementType int
struct sNode
{
ElementType *Data;
ElementType Top; //栈顶元素下标
int MaxSize; //堆栈容量
};
typedef struct sNode *Stack;
Stack CreateStack(int n) //创建一个空的堆栈
{
Stack s = (Stack)malloc(sizeof(sNode));
s->Data = (ElementType *)malloc(n*sizeof(ElementType));
s->Top = -1;
s->MaxSize = n;
}
bool IsFull(Stack s) //判断堆栈是否已满
{
if(s->Top == s->MaxSize-1)
return true;
else
return false;
}
void Push(Stack s, ElementType item) //元素入栈
{
if(IsFull(s))
printf("栈满,无法存储!");
else
s->Data[++(s->Top)] = item;
}
bool IsEmpty(Stack s) //判断是否为空栈
{
if(s->Top == -1)
return true;
else
return false;
}
ElementType Pop(Stack s) //元素出栈
{
if(IsEmpty(s))
{
printf("栈空,无法删除!");
return 0;
}
else
return (s->Data[(s->Top)--]);
}
void Printdisplay(Stack s, int n)
{
for(int i = 0; i < n; i++)
printf("%d\n", s->Data[(s->Top)--]);
}
int main()
{
int n, a[20];
scanf("%d", &n);
Stack t = CreateStack(n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = 0; i < n; i++)
Push(t, a[i]);
Pop(t);
n--; //因为Pop了一个栈顶元素
Printdisplay(t,n);
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511172600261.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUxMDI1NTYx,size_16,color_FFFFFF,t_70#pic_center)