1. 程式人生 > >資料結構:棧及應用

資料結構:棧及應用

  棧的定義:

     棧是隻能在一端進行資料插入和刪除的線性表。

棧的性質:

     後進先出(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 }
View Code

棧的應用:

求字首、字尾表示式的值,有關字首、字尾表示式,在後面二叉樹時介紹,應用程式碼如下:

 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