• 面试金典--一个数组实现三个栈(固定大小)


     1 #include <iostream>
     2 #include <queue>
     3 #include <climits>
     4 #include <algorithm>
     5 #include <memory.h>
     6 #include <stdio.h>
     7 #include <ostream>
     8 #include <vector>
     9 #include <list>
    10 #include <cmath>
    11 #include <string>
    12 #include <stdexcept>
    13 using namespace std;
    14 
    15 class stack3parts
    16 {
    17     const int stackSize;
    18     int top1;
    19     int top2;
    20     int top3;
    21     int* data;
    22 public:
    23     stack3parts(int paramSize):stackSize(paramSize),top1(0),top2(paramSize),top3(2*paramSize)
    24     {
    25         data = new int[paramSize*3];
    26     }
    27 
    28     void push(int stackNum,const int &elem)
    29     {
    30         switch(stackNum)
    31         {
    32         case 1:
    33             if(top1 == stackSize)
    34                 throw std::out_of_range("stack1 is full!");
    35             data[top1++] = elem;
    36             break;
    37         case 2:
    38             if(top2 == 2*stackSize)
    39                 throw std::out_of_range("stack2 is full!");
    40             data[top2++] = elem;
    41             break;
    42         case 3:
    43             if(top3 == 3*stackSize)
    44                 throw std::out_of_range("stack3 is full!");
    45             data[top3++] = elem;
    46             break;
    47         }
    48     }
    49 
    50     int pop(int stackNum)
    51     {
    52         switch(stackNum)
    53         {
    54         case 1:
    55             if(top1 == 0)
    56                 throw std::out_of_range("stack1 is empty!");
    57             top1--;
    58             return data[top1];
    59             break;
    60         case 2:
    61             if(top2 == stackSize)
    62                 throw std::out_of_range("stack2 is empty!");
    63             top2--;
    64             return data[top2];
    65             break;
    66         case 3:
    67             if(top3 == 2*stackSize)
    68                 throw std::out_of_range("stack3 is empty!");
    69             top3--;
    70             return data[top3];
    71             break;
    72         }
    73     }
    74 };
    75 int main()
    76 {
    77     stack3parts s(3);
    78     s.push(1,2);
    79     s.push(2,3);
    80     s.push(3,4);
    81 
    82     cout<<s.pop(1)<<endl;
    83     cout<<s.pop(2)<<endl;
    84     cout<<s.pop(3)<<endl;
    85 
    86     s.pop(1);
    87     return 0;
    88 }

    这个思路是对一个数组进行固定的大小分配,这样缺点是资源得不到充分利用

  • 相关阅读:
    libiconv2.dll
    windows下安装,配置gcc编译器
    STM32之DMA
    keilkill.bat
    STM32之系统滴答定时器
    STM32库函数开发使用总结
    STM32之串口通信
    yocto系统介绍
    fork子进程僵尸问题及解决方案
    shell实现的守护进程
  • 原文地址:https://www.cnblogs.com/cane/p/3793445.html
Copyright © 2020-2023  润新知