顺序栈
数据结构底子差,边学习边记录,共同学习进步,如果发现有错误,麻烦评论指出,谢谢你。
如果文章对你有帮助,麻烦顺手点个赞,看见对你们有用也是我一大动力。
**栈(stack)**是限定仅在表的一端进行插入和删除操作的线性表。
允许插入和删除的一段称为栈顶(stack top),另一端为栈底(stack bottom)
不含任何数据的栈为空栈。
栈的特点:后进先出。
**例题:**一个栈的入栈序列是1、2、3、4、5,则栈的不可能输出序列是(C)
A.54321 B.45321 C.43512 D.12345
解释:
如果为A,则12345全部一次性入栈,最后依次出栈。
如果为B,1234依次入栈,4出栈,5入栈,5出栈,321依次出栈。
如果为D,12345依次进栈接着出栈。
C不可能是,12顺序有错,2先后栈,则2肯定先出栈。
顺序栈代码
#include "stdafx.h"
#include "malloc.h"
const int STACKSIZE=5;
void Push(int x);
int getTop();
int Pop();
int Empty();
int data[STACKSIZE];
int top=-1;
int main()
{
if (Empty() == 1) printf("栈空!\n");
else printf("栈不为空!\n");
while (true) {
int x;
if (top != 4) {
printf("请输入一个整数:");
scanf_s("%d",&x);
Push(x);
printf("已入栈!\n");
}
else
{
printf("栈满!\n");
break;
}
}
printf("栈顶元素:%d\n", getTop());
while (true) {
if (top != -1) {
printf("%d已出栈\n", Pop());
}
else
{
if (Empty() == 1) printf("栈空!\n");
else printf("栈不为空!\n");
break;
}
}
return 0;
}
//入栈
void Push(int x)
{
if (top == STACKSIZE - 1) throw "上溢";
data[++top] = x;
}
//取栈顶元素(并不删除)
int getTop()
{
return data[top];
}
//出栈操作,将栈顶元素弹出
int Pop()
{
int x;
if (top == -1) throw "下溢";
x = data[top--];
return x;
}
//判断栈是否为空
int Empty()
{
if (top == -1) return 1;
else return 0;
}
运行结果: