顺序栈---初始化、清空、销毁、求表长、判栈空、入栈、出栈操作


 1 #define MaxSize 100
 2 
 3 //顺序栈的创建
 4 typedef struct {
 5     int *base;//栈底指针
 6     int *top;//栈顶指针
 7     int stacksize;//栈可用最大容量
 8 }SqStack;
 9 
10 //栈的初始化
11 bool InitStack(SqStack &s)
12 {
13     s.base = new int[MaxSize];
14     //s.base = (int*)malloc(StackMaxSize*sizeof(int));
15     if (!s.base)//判断分配内存有没有成功
16         return false;
17     s.top = s.base;
18     s.stacksize = MaxSize;
19     return true;
20 }
21 
22 //判栈空
23 bool StackEmpty(SqStack s)
24 {
25     if (s.base == s.top)
26         return true;
27     else
28         return false;
29 }
30 
31 //求栈长
32 int StackLength(SqStack s)
33 {
34     return s.top - s.base;
35 }
36 
37 //清空顺序栈
38 bool StackClear(SqStack &s)
39 {
40     if (s.base)
41         s.top = s.base;//直接将top下移下来就可
42     return true;
43 }
44 
45 //销毁顺序栈
46 bool StackDestroy(SqStack &s)
47 {
48     if (s.base) {
49         delete s.base;//释放指针内存,和new配对,指针的对象没了
50         s.stacksize = 0;//将栈的个数设置为0
51         s.base = s.top = NULL;//避免野指针生成
52     }
53     return true;
54 }
55 
56 //入栈操作---存放元素到栈顶
57 bool PushStack(SqStack &s, int e)
58 {
59     //栈底永远在下面呢---判断栈满了
60     if (s.top - s.base == s.stacksize)
61         return false;
62 
63     *s.top = e;//元素e压入栈顶
64     s.top++;//栈指针+1
65     return true;
66 }
67 
68 //出栈操作---将位于栈顶的元素弹出
69 bool PopStack(SqStack &s, int &e)
70 {
71     //判断指针下溢
72     if (s.base == s.top)
73         return false;
74     e = *s.top;
75     s.top--;
76 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM