栈是一种先入后出的数据结构。
如下图所示,入栈的顺序为1、2、3;出栈的顺序则反过来:3、2、1。
可以想象往一个箱子里放书,先放进去的书必然在箱子的底部,最后放进去的书在箱子的顶部。拿书的时候则要先拿顶部(后放进去)的书,最先放进去的书最后才能拿出来。
栈可以用链表来实现:
#include<iostream>
using namespace std;
struct node //定义栈的结点结构
{
int data;
node *next;
};
class Stack
{
node *top; //栈顶指针
public:
Stack() //构造函数
{
top = NULL;
}
void push(int i); //入栈函数
int pop(); //出栈函数
};
void Stack::push(int x) //入栈
{
node *newnode = new node;
newnode->data = x;
newnode->next = top;
top = newnode;
}
int Stack::pop() //出栈
{
int topVal = top->data;
node *tmp = top; //tmp指针指向栈顶结点
top = top->next; //栈顶指针指向栈顶的下一个结点
delete tmp; //删除原先的栈顶结点
return topVal; //返回被删除的值
}
int main()
{
Stack A;
int arr[]={3,12,8,9,11};
cout << "入栈顺序: ";
for(int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
A.push(arr[i]);
}
cout << endl;
cout << "出栈顺序: ";
for(int i = 0; i < 5; i++)
{
cout << A.pop() << " ";
}
cout << endl;
return 0;
}
运行结果:
入栈顺序: 3 12 8 9 11
出栈顺序: 11 9 8 12 3
TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号