24h購物| | PChome| 登入
2012-10-16 21:40:05| 人氣5,253| 回應0 | 上一篇 | 下一篇

[資料結構][作業] STACK 實作

推薦 0 收藏 0 轉貼0 訂閱站台



前言:

以C or C++完成

請以Link list來實作一個大小為5的Stack

必須包含Push  Pop(含印出)  Isfull  Isempty功能

一個功能占25pt

繳交格式  學號_姓名_HW1.cpp  (ex: 1005XXXXX_助教_HW1.cpp)

檔案只需要.cpp  or .c 檔     不需要其他檔案

有問題再寄信給助教


雖然是這麼說, 我基本上還是按照 STL 中的 Stack 去實作其方法。



#include <cstdio>
#include <cstdlib>
using namespace std;
template <typename T>
struct Node {
    T d;
    Node *prev;
};
template <class T>
class STACK {
    public:
        STACK() {
            idx = NULL;
            SIZE = 0;
        }
        T top() {
            if(isempty()) {
                puts("top() cant't access !!");
                exit(1);
            }
            T cpy = idx->d;
            return cpy;
        }
        void pop() {
            if(isempty()) {
                puts("pop() can't access !!");
                return;
            }
            Node<T> *tmp;
            tmp = idx;
            idx = idx->prev;
            delete tmp;
            SIZE--;
        }
        void push(T item) {
            if(isfull()) {
                puts("push() can't access !!");
                return;
            }
            Node<T> *nd = new Node<T>;
            nd->d = item;
            nd->prev = idx;
            idx = nd;
            SIZE++;
        }
        bool isempty() {
            return idx == NULL;
        }
        bool isfull() {
            return SIZE == 5;
        }
        int size() {
            return SIZE;
        }
    private:
        Node<T> *idx;
        int SIZE;
};
int main() {
    STACK<int> stk;
    int cmd, ins;
    while(printf("[0]pop [1]push [2]isfull [3]isempty [4]top : "),
          scanf("%d", &cmd) == 1) {
        switch(cmd) {
            case 0:
                stk.pop();
                break;
            case 1:
                printf("please enter a integer : "), scanf("%d", &ins);
                stk.push(ins);
                break;
            case 2:
                printf("%s\n", stk.isfull() ? "true" : "false");
                break;
            case 3:
                printf("%s\n", stk.isempty() ? "true" : "false");
                break;
            case 4:
                printf("%d\n", stk.top());
        }
    }
    return 0;
}

台長: Morris
人氣(5,253) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 亂糟糟筆記 |
此分類下一篇:[Ubuntu] XTerm 字型太小
此分類上一篇:[C/C++] Text Animation

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文