資料結構:棧及應用
阿新 • • 發佈:2018-11-21
棧的定義:
棧是隻能在一端進行資料插入和刪除的線性表。
棧的性質:
後進先出(FILO),後面進去的元素,先出來,先進去的元素後出來
棧的操作:
棧的操作很簡單,就是入棧和出棧,如下圖所示
棧的表示:
用一個一維陣列,加一個指標,表示棧,程式碼如下:
1 #include <iostream> 2 using namespace std; 3 const int N =10;//定義棧的長度 4 int a[N]; //View Code定義棧(陣列) 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 return0; 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