栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底
顺序栈的实现是十分简单的跟顺序表的顺序存储基本一致
顺序栈的基本操作如下:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50//顺序栈的初始空间
#define Stackcream 10//存储空间分配增量
typedef struct
{
int data[MaxSize];//初始化top指向-1
int top;//指示当前栈顶位置
}Sqtack;//顺序栈
void InitStack(Sqtack &stack)
{
stack.top = -1;//初始状态为-1也可以指向0在相关操作有一些变动
}
bool STackEmpty(Sqtack stack)//判栈空
{
if (stack.top == -1)
return false;
else
return true;
}
int GetLength(Sqtack &stack)
{
return stack.top + 1;//因为栈顶指针为top初始指向-1所以元素个数为top+1;
}
int Push(Sqtack &stack, int x)
{
if (stack.top == MaxSize - 1)//栈满报错
return 0;
stack.data[++stack.top] = x;//栈顶指针加1入栈
return 1;
}
int Pop(Sqtack &stack, int &x)//弹出栈顶元素
{
if (stack.top == -1)//如果为栈底什么也不做
return 0;
x = stack.data[stack.top--];
return true;
}
int GetTop(Sqtack &stack, int &x)
{
if (stack.top == -1)
return 0;
x = stack.data[stack.top];
return 1;
}
void traverse(Sqtack stack)//遍历栈中所有元素
{
int i = 0;
while (i <= stack.top)
{
printf("%d\n", stack.data[i++]);
}
}
void getTop(Sqtack &stack, int *e)//获得栈顶元素
{
if (stack.top == -1)
return;
else
*e = stack.data[stack.top];
}
int main()
{
Sqtack stack;
InitStack(stack);
STackEmpty(stack);
int i = 0;
int x;
int e=0;
int j;
for (; i < 5; i++)
{
printf("请输入入栈的元素:\n");
scanf_s("%d", &x);
Push(stack, x);
}
traverse(stack);
printf("栈的长度为%d\n", GetLength(stack));
GetTop(stack, e);
printf("栈顶元素为%d\n",e);
printf("出栈元素:\n");
Pop(stack, j);
printf("出栈后\n");
traverse(stack);
}
|