一、顺序栈
1、常用操作代码:
#include<bits/stdc++.h>
using namespace std;
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode
{
int *Data; // 存储元素的数组
int Top; // 栈顶指针
int MaxSize; // 堆栈最大容量(存的最大元素数量)
};
typedef PtrToSNode Stack;
// 顺序栈的创建
Stack CreateStack(int MaxSize)
{
Stack S = (Stack)malloc(sizeof(struct SNode));
S -> Data = (int *)malloc(sizeof(int) * MaxSize);
S -> Top = -1; // 代表下标从0开始
S -> MaxSize = MaxSize;
return S;
}
// 顺序栈的入栈操作
bool IsFull(Stack S)
{
return (S -> Top == S -> MaxSize - 1);
}
bool Push(Stack S, int x)
{
if(IsFull(S) == true)
{
printf("堆栈满");
return false;
}
else
{
S -> Data[++ (S -> Top)] = x;
return true;
}
}
// 顺序栈的出栈操作
bool IsEmpty(Stack S)
{
return (S -> Top == -1);
}
bool Pop(Stack S)
{
if(IsEmpty(S) == true)
{
printf("堆栈空");
}
else
{
(S -> Top) --;
return true;
}
}
void PrintfS(Stack S)
{
if(S -> Top == -1)
{
printf("空栈");
}
else
{
for(int i = 0 ; i <= S -> Top ; i ++)
{
printf("%d ",S -> Data[i]);
}
printf("\n");
}
}
int main()
{
Stack S;
int n; // 元素数量
scanf("%d",&n);
S = CreateStack(n);
for(int i = 0 ; i < n ; i ++)
{
int x; // 每个元素的值
scanf("%d",&x);
// 各元素入栈
Push(S,x);
}
printf("栈的初始状态:\n");
// 输出栈的最大元素数量
printf("%d\n",S -> MaxSize);
// 遍历栈(原始状态)
PrintfS(S);
printf("删除栈顶元素后的栈:\n");
// 删除栈顶元素
Pop(S);
// 遍历删除栈顶元素后的栈
PrintfS(S);
printf("插入一个元素后的栈:\n");
// 某元素入栈
Push(S,6);
// 遍历删除栈顶元素后的栈
PrintfS(S);
return 0;
}
2、运行结果