静态栈像线性表一样,只不过它是受限定的线性表,同时可以实现初始化,插入、删除等操作。可以同时调用监视或者自动窗口来观察入栈、出栈情况,还有元素个数,即栈顶,代码具体实现如下:
head.h
#include<stdio.h>
#include<assert.h>
typedef int DataType;
#define MAX_SIZE 100
typedef struct Stack
{
DataType _array[MAX_SIZE];
int _top;
}Stack;
// 栈的初始化
void StackInit(Stack* s);
// 入栈
void StackPush(Stack* s, DataType data);
// 出栈
void StackPop(Stack* s);
// 获取栈顶元素
DataType StackTop(Stack* s);
// 获取栈中元素个数
int StackSize(Stack* s);
// 检测栈是否为空
int StackEmpty(Stack* s);
head.c
#include"head.h"
// 栈的初始化
void StackInit(Stack* s)
{
s->_top = 0;
}
// 入栈
void StackPush(Stack* s, DataType data)
{
if (MAX_SIZE-1 == s->_top)
{
printf("栈已满\n");
return;
}
s->_array[s->_top] = data;
s->_top++;
}
// 出栈
void StackPop(Stack* s)
{
if (0 == s->_top)
{
printf("栈为空栈,无法操作\n");
return;
}
s->_top--;
}
// 获取栈顶元素
DataType StackTop(Stack* s)
{
assert(s);
if (0 == s->_top)
{
printf("栈为空栈\n");
}
return s->_array[s->_top];
}
// 获取栈中元素个数
int StackSize(Stack* s)
{
return s->_top;
}
// 检测栈是否为空
int StackEmpty(Stack* s) //如果栈为空,直接返回1,栈不为空,直接返回0
{
return s->_top ? 1 : 0;
}
test.c
#include"head.h"
#include<stdlib.h>
int main()
{
int ret = 0;
Stack s;
StackInit(&s);
StackPush(&s, 1);
StackPush(&s, 2);
StackPush(&s, 3);
StackPush(&s, 4);
StackPush(&s, 5);
StackSize(&s);
StackPop(&s);
StackPop(&s);
StackSize(&s);
ret = StackTop(&s);
StackEmpty(&s);
system("pause");
return 0;
}