一个数组存储两个栈

算法导论上,第10章的一个练习,用一个数组实现存储两个栈,使的每个栈的push和pop的时间都是O(1)

  1 #ifndef DOUBLESTACK_H
  2 #define DOUBLESTACK_H
  3 
  4 #define  TOTAL 10
  5 
  6 template<class T>
  7 class double_stack
  8 {
  9     T m_array[20];
 10     int m_top1, m_end1;
 11     int m_top2, m_end2;
 12 public:
 13     double_stack();
 14     void push(int stack_num, T &data);
 15     void pop(int stack_num);
 16     void print();
 17 };
 18 
 19 /*************************************************
 20 Function:       // double_stack
 21 Description:    // 构造函数
 22 Input:          // 无
 23 Return:         // 无
 24 *************************************************/
 25 template<class T> 
 26 double_stack<T>::double_stack()
 27 {
 28     m_top1 = 0;
 29     m_top2 = TOTAL - 1;
 30     m_end1 = 0;
 31     m_end2 = TOTAL - 1;
 32 }
 33 
 34 /*************************************************
 35 Function:       // push
 36 Description:    // 压栈函数
 37 Input:          // stack_num: 被压入堆栈编号
 38                 // T        : 带压栈数据
 39 Return:         // 无
 40 *************************************************/
 41 template<class T>
 42 void double_stack<T>::push(int stack_num, T &data)
 43 {
 44     if(m_end2 >= m_end1)
 45     {
 46         switch (stack_num)
 47         {
 48         case 1:
 49             m_array[m_end1++] = data;
 50             break;
 51         case 2:
 52             m_array[m_end2--] = data;
 53         default:
 54             break;
 55         }    
 56     }
 57     else
 58     {
 59         cout << "overflow" << endl;
 60     }
 61 }
 62 
 63 /*************************************************
 64 Function:       // push
 65 Description:    // 出栈函数
 66 Input:          // stack_num: 被压入堆栈编号
 67 Return:         // 无
 68 *************************************************/
 69 template<class T>
 70 void double_stack<T>::pop(int stack_num)
 71 {
 72     switch(stack_num)
 73     {
 74     case 1:        
 75         if (m_end1 > m_top1)
 76         {
 77             cout << m_array[--m_end1] << endl;
 78         }
 79         else
 80         {
 81             cout << "downflow" << endl;
 82         }
 83         break;
 84     case 2:
 85         if (m_end2 < m_top2)
 86         {
 87             cout << m_array[++m_end2] << endl;
 88         }
 89         else
 90         {
 91             cout << "downflow" << endl;
 92         }
 93         break;
 94     default:
 95         break;
 96     }
 97 }
 98 
 99 /*************************************************
100 Function:       // push
101 Description:    // 出栈函数
102 Input:          // stack_num: 被压入堆栈编号
103 Return:         // 无
104 *************************************************/
105 template<class T>
106 void double_stack<T>::print()
107 {
108     for(int i = 0; i < TOTAL; i++)
109     {
110         cout << m_array[i] << " ";
111     }
112     cout << endl;
113 }
114 #endif

转载于:https://www.cnblogs.com/liuxg/archive/2013/03/28/2986343.html

猜你喜欢

转载自blog.csdn.net/weixin_34391445/article/details/93433652