Stack::定義

藉助Vector實現棧,棧頂是向量末尾,棧底是向量起始:

#include "../Vector/Vector.h" //以向量爲基類,派生出棧模板類
template <typename T> class Stack: public Vector<T> { //將向量的首/末端作爲棧底/頂
public: //size()、empty()以及其它開放接口,均可直接沿用
   void push(T const& e) { insert(size(), e); }  //入棧:等效於將新元素作爲向量的末元素插入
   T pop() { return remove(size() - 1); } //出棧:等效於刪除向量的末元素
   T& top() { return (*this)[size() - 1]; } //取頂:直接返回向量的末元素
};

十進制到base進制的轉換:

void convert(Stack<char>& S, __int64 n, int base) {  //十進制數n到base進制的轉換(迭代版)
   static char digit[] //0 < n, 1 < base <= 16,新進制下的數位符號,可視base取值範圍適當擴充
   = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
   while (n > 0) { //由低到高,逐一計算出新進制下的各數位
      int remainder = (int) (n % base); S.push(digit[remainder]); //餘數(當前位)入棧
                                                      /*DSA*/printf("%20I64d =", n);
      n /= base; //n更新爲其對base的除商
                                                      /*DSA*/printf("%20I64d * %d + %d\n", n, base, remainder);
                                                      /*DSA*/print(S);   getchar();
   }
} //新進制下由高到低的各數位,自頂而下保存於棧S中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章