栈数据结构

 

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef char DataType;
  5 
  6 
  7 #define StackSize 100
  8 
  9 //栈的定义
 10 typedef struct
 11 {
 12     DataType stack[StackSize];
 13     int top;//指示栈顶指针
 14 }SqStack;
 15 
 16 //初始化栈为空栈
 17 void InitStack(SqStack &s)
 18 {
 19     s.top = -1;//设置栈顶指针为-1
 20 }
 21 
 22 //判断栈顶为空
 23 bool StackEmpty(SqStack s)
 24 {
 25     if (s.top == -1)
 26         return true;
 27     else
 28         return false;
 29 }
 30 
 31 //读取栈顶元素
 32 bool GetTop(SqStack s, DataType &e)
 33 {
 34     if (s.top == -1)
 35     {
 36         return false;//空栈,无法继续操作
 37     }
 38     else
 39     {
 40         e = s.stack[s.top];//读取到栈顶元素
 41         return true;
 42     }
 43 
 44 }
 45 //进栈操作
 46 bool PushStack(SqStack &s, DataType e)
 47 {
 48     //先判断元素是否已经满了
 49     if (s.top >= StackSize - 1)
 50     {
 51         return false;
 52     }
 53     else
 54     {
 55         s.top += 1;//栈顶指针增加1
 56         s.stack[s.top] = e;//新元素e进栈
 57         return true;
 58     }
 59 }
 60 //出栈操作--将栈顶元素出栈,并将值赋值给e
 61 bool PopStack(SqStack &s, DataType &e)
 62 {
 63     if (s.top == -1)
 64     {
 65         return false;//空栈
 66     }
 67     else
 68     {
 69         e = s.stack[s.top];//将元素赋值给e
 70         s.top -= 1;//栈顶指针减少1
 71         return true;
 72     }
 73 }
 74 //求栈的长度
 75 int StackLength(SqStack s)
 76 {
 77     return s.top + 1;
 78 }
 79 //清空栈
 80 void ClearStack(SqStack s)
 81 {
 82     s.top = -1;//函数运行结束后系统会自动回收内存
 83 }
 84 
 85 
 86 int main()
 87 {
 88     SqStack s;
 89     DataType a[] = { 'a','b','c','d','e' };
 90     DataType e;
 91 
 92     //初始化栈
 93     InitStack(s);
 94 
 95     //进栈操作
 96     for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
 97     {
 98         if (PushStack(s, a[i]) == false)
 99         {
100             //栈满无法进栈
101             return false;
102         }
103     }
104 
105     //出栈操作
106     printf("出栈的元素是:");
107     if (PopStack(s, e) == true)
108     {
109         printf("%4c", e);
110     }
111     if (PopStack(s, e) == true)
112     {
113         printf("%4c\n", e);
114     }
115     printf("当前栈顶元素是:");
116     if (GetTop(s, e) == true)
117     {
118         printf("%4c\n", e);
119     }
120 
121     if (PushStack(s, 'f') == false)
122     {
123         //栈已满
124         return false;
125     }
126     if (PushStack(s, 'g') == false)
127     {
128         //栈已满
129         return false;
130     }
131 
132     /*
133     由于用s.top = -1来判断是否为空以及初始化,所以计算长度时要多加一个1
134     */
135     printf("当前栈中的元素个数:%d\n", StackLength(s));
136 
137     printf("元素出栈的序列是:");
138     while (!StackEmpty(s))
139     {
140         PopStack(s, e);
141         printf("%4c ", e);
142     }
143     printf("\n");
144 
145 
146     getchar();
147     return 0;
148 }

 

posted @ 2020-10-09 00:12  小迪xiaodi  阅读(154)  评论(0)    收藏  举报