堆栈(Stack):具有一定操作约束的线性结构。只允许在一端进行插入删除操作,操作规则为“后进先出”,LIFO。
栈的抽象数据类型描述:
数据对象集合:一个有0个或多个元素的有穷线性表。
基本操作集合:
(1)初始化栈:void InitStack(Stack &s);
(2)判断栈是否已满:bool isFull(Stack &s);
(3)判断栈是否为空:bool isEmpty(Stack &s);
(4)元素n入栈:void Push(Stack &s, int n);
(5)栈顶元素出栈:DataType (Stack &s);
栈的顺序存储结构通常由一个一维数组和一个指向栈顶元素位置的变量组成
#include <cstdio>
#define MAX 100
typedef int DataType;
struct Stack
{
DataType data[MAX];
int top;
};
void InitStack(Stack &s)
{
s.top = -1;
}
bool isFull(Stack &s)
{
return s.top == MAX - 1 ? true : false;
}
void Push(Stack &s, DataType n)
{
if(!isFull(s))
s.data[++s.top] = n;
else
printf("Full!\n");
}
bool isEmpty(Stack &s)
{
return s.top == -1 ? true : false;
}
DataType Pop(Stack &s)
{
int tmp;
if(!isEmpty(s))
{
tmp = s.data[s.top--];
return tmp;
}
printf("Empty!\n");
}
测试代码:
int main()
{
Stack s;
int t;
InitStack(s);
for(int i = 0; i < 10; i++)
Push(s, i);
for(int i = 0; i < 10; i++)
printf("%d\n", s.data[i]);
printf("\n");
for(int i = 0; i < 10; i++)
{
t = Pop(s);
printf("%d\n", t);
}
printf("\n");
}