数据结构:栈及应用

  栈的定义:

     栈是只能在一端进行数据插入和删除的线性表。

栈的性质:

     后进先出(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

猜你喜欢

转载自www.cnblogs.com/noipbar/p/9997060.html
今日推荐