首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 鏈棧模板類完整實現:MyStack 符合題目要求代碼

     編輯:程式設計綜合問答

完整代碼


enum ErrorCode { success, underflow, overflow };

template 
struct Node {
    StackEntry data;
    Node* next;
    Node(const StackEntry& item, Node* nxt = nullptr) : data(item), next(nxt) {}
};

template 
class MyStack {
public:
    MyStack() : pTop(nullptr) {}
    ~MyStack() { clear(); }

    bool empty() const { return pTop == nullptr; }

    int size() const {
        int cnt = 0;
        for (Node* p = pTop; p; p = p->next) ++cnt;
        return cnt;
    }

    ErrorCode pop() {
        if (empty()) return underflow;
        Node* tmp = pTop;
        pTop = pTop->next;
        delete tmp;
        return success;
    }

    ErrorCode top(StackEntry& item) const {
        if (empty()) return underflow;
        item = pTop->data;
        return success;
    }

    ErrorCode push(const StackEntry& item) {
        Node* node = new (std::nothrow) Node(item, pTop);
        if (!node) return overflow;
        pTop = node;
        return success;
    }

    void clear() {
        while (pTop) {
            Node* tmp = pTop;
            pTop = pTop->next;
            delete tmp;
        }
    }

private:
    Node* pTop;
};

實現要點

  • 構造函數初始化 `pTop(nullptr)`,析構調用 `clear()` 防洩漏。
  • `push` 用 `nothrow new` 捕獲分配失敗返回 `overflow`。
  • `top` 通過引用參數返回棧頂元素,不修改棧。
  • `size()` 遍歷計數,O(n);若需 O(1) 可添加 `count` 字段維護。
  • 模板定義放在頭文件(或 `.tpp` 包含),確保編譯期實例化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved