盏是一种受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。
允许进行插入和删除运算的一端称为栈顶(top),位于栈顶的元素称为栈顶元素。
不允许进行插入和删除运算的另一端称为栈底(bottom)
从栈中删除一个元素称为出栈或退栈
由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,所以又把
栈称为后进显出表(Last In First Out,简称FIFO)
#include<iostream>
#include<stack>
using namespace std;
//链栈是单链表的特例,所以其类型的定义和变量的说明和单链表一样
struct StackNode{
int data;
StackNode *next;
};
StackNode *top; //top是栈顶指针,它指向栈顶节点。当top=NULL时,该链栈为空栈;
//栈底结点的指针域为空
//初始化链栈
void InitStack(StackNode *top){
top = NULL; //将链栈置空
}
//检查链栈是否为空
bool IsEmpty(StackNode *top){ //若空则返回1,否则返回0
if(top == NULL)
return 1;
else
return 0;
}
//读取栈顶元素
int GetTop(StackNode *top){
if(top == NULL){
cout<<"Stack is empty!\n";
return 0;
}
else
return (top->data);
}
//入栈
StackNode *Push(StackNode *top,int x){
StackNode *p;
p = new StackNode;//步骤1:为待入栈元素x动态分配新结点p
p->data = x; //步骤2:并将x值付给新节点p的数据域
p->next = top; //步骤3:将新结点p的指针域指向原栈顶节点
top = p; //步骤4:修改栈顶指针top,使其指向新节点p
return (top); //步骤5:返回新的栈顶指针
}
//出栈
StackNode *Pop(StackNode *top){
StackNode *p;
if(top == NULL){ //步骤1:检查栈是否为空
cout<<"Stack is empty!"<<endl;
return NULL; //如果为空,则提示,并返回空指针
}
//不为空:
else{
p = top; //保留原栈顶节点指针
top = top->next; //从链栈中删除原栈顶节点
delete (p); //释放原栈顶存储空间
return (top); //出栈成功,函数返回新的栈顶指针
}
}
int main()
{
}
—— 生命的意义,在于赋予它意义。