Q3.1 一个数组实现三个栈

Describe how you could use a single array to implement three stacks.

 1 typedef struct Node{
 2     int val,preIdex;
 3     Node(int val = INT_MIN,int preIndex=-2):val(val),preIndex(preIndex){}
 4 };
 5 
 6 class Stack3{
 8 public:
 9     Stack3(int totalSize = 900){
10         buf = new Node[totalSize];
11         ptop[0] = -1;
12         ptop[1] = -1;
13         ptop[2] = -1;
14         this->totalSize = totalSize;
15     }
16     
17     ~Stack3(){
18         delete[] buf;
19     }
20     
21     void Push(int stackNum,int val){
22         bur[cur].val = val;
23         bur[cur].preIndex = ptop[stackNum];
24         ptop[stackNum] = cur++;
25         
26         //沿着数组一次向后查找,直到找到第一个空的
27         while(cur<totalSize){
28             if(buf[i].preIndex == -2)
29                 break;
30         }
31     }
32     
33     void Pop(int stackNum){
34         
35         //每次执行pop操作,检查该元素对应索引是否小于cur,如果是, 将cur更新到该元素索引;否则cur不变
36         if(ptop[stackNum]<cur)
37             cur = ptop[stackNum];
38         //清楚数据     
39         buf[ptop[stackNum]].val = INT_MIN;
40         ptop[stackNum] = buf[ptop[stackNum]].preIndex;
41         buf[ptop[stackNum]].preIndex = -2;
42     
43     }
44     
45     int top(int stackNum){
46         return buf[ptop[stackNum]].val;
47     }
48     
49     bool empty(int stackNum){
50         return ptop[stackNum]== -1;
51     }
52 
53 private:
54     Node *buf;
55     int ptop[3];
56     int totalSize;
57     int cur;
58 };

 

转载于:https://www.cnblogs.com/xuanxu/p/3240367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值