栈的定义:
栈是只能在一端进行数据插入和删除的线性表。
栈的性质:
后进先出(FILO),后面进去的元素,先出来,先进去的元素后出来
栈的操作:
栈的操作很简单,就是入栈和出栈,如下图所示
栈的表示:
用一个一维数组,加一个指针,表示栈,代码如下:
1 #include <iostream> 2 using namespace std; 3 const int N =10;//定义栈的长度 4 int a[N]; //定义栈(数组) 5 int TOP =0; //定义栈的指针 6 7 void push(int x); //入栈 8 int pop(); //出栈 9 void print(); //栈元素输出 10 11 int main() 12 { 13 for (int i=1;i<=11;i++) 14 { 15 push(i); 16 } 17 print(); 18 cout<<pop()<<endl; 19 cout<<pop()<<endl; 20 cout<<pop()<<endl; 21 print(); 22 return 0; 23 } 24 25 void print() 26 { 27 for (int i=0;i<TOP;i++) 28 { 29 cout<<a[i]<<" "; 30 } 31 cout<<endl; 32 } 33 34 int pop() 35 { 36 int x; 37 if (TOP == -1) 38 { 39 cout<<"栈已空"<<endl; 40 return 0; 41 } 42 x=a[TOP-1]; 43 TOP--; 44 return x; 45 } 46 47 void push(int x) 48 { 49 if (TOP == N) 50 { 51 cout<<"栈已满"<<endl; 52 return ; 53 } 54 a[TOP] = x; 55 TOP ++; 56 }
栈的应用:
求前缀、后缀表达式的值,有关前缀、后缀表达式,在后面二叉树时介绍,应用代码如下:
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int N =255;//定义栈的长度 5 int a[N]; //定义栈(数组) 6 int TOP =0; //定义栈的指针 7 8 void push(int x); //入栈 9 int pop(); //出栈 10 void jisuan(string ss); 11 12 int main() 13 { 14 string ss="34+5*6-"; //34+5*6- 15 jisuan(ss); 16 cout<<"表达式的值是:"<<pop()<<endl; 17 return 0; 18 } 19 20 void jisuan(string ss) 21 { 22 for (int i=0;i<ss.length();i++) 23 { 24 int x=0,y=0; 25 if (ss[i] == '+') 26 { 27 x=pop(); 28 y=pop(); 29 push(x+y); 30 continue; 31 } 32 if (ss[i] == '-') 33 { 34 x=pop(); 35 y=pop(); 36 push(x-y); 37 continue; 38 } 39 if (ss[i] == '*') 40 { 41 x=pop(); 42 y=pop(); 43 push(x*y); 44 continue; 45 } 46 if (ss[i] == '/') 47 { 48 x=pop(); 49 y=pop(); 50 push(x/y); 51 continue; 52 } 53 push(ss[i]-48); 54 } 55 } 56 57 int pop() 58 { 59 int x; 60 if (TOP == -1) 61 { 62 cout<<"栈已空"<<endl; 63 return 0; 64 } 65 x=a[TOP-1]; 66 TOP--; 67 return x; 68 } 69 70 void push(int x) 71 { 72 if (TOP == N) 73 { 74 cout<<"栈已满"<<endl; 75 return ; 76 } 77 a[TOP] = x; 78 TOP ++; 79 }
栈相关题目:
在信息学奥赛中,有关栈的知识考查,主要以选择题居多,考查栈的基本概念和操作
如下面的题目:
某个车站呈狭长型,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为“进,出,进,进,进,出,出,进,进,进,出,出”,假设车辆入站的顺序为1,2,3,..则车辆的出站顺序为()
A.1,2,3,4,5 B.1,2,4,5,7 C.1,4,3,7,6 D.1,4,3,7,2