首頁>Club>
我封裝一個鏈棧,開始可能這樣定義: #define DataType int 但是我使用的時候需要兩個鏈棧,一個存int型別,另一個存char,這個該怎麼處理呢?
4
回覆列表
  • 1 # 3rdlibs

    你可以使用c++模版來實現,模版鏈棧這樣定義:

    template<typename DataType>

    struct Node

    {

    DataType data;

    Node<DataType>* next;

    };

    然後你把封裝的鏈棧實現類也改為模版就行了。

  • 2 # 南極影解

    基本運算的程式碼實現

    1. 結點型別的宣告typedef struct linknode{ ElemType data; struct linknode *next; }LinkStNode; //鏈棧的結點型別

    這樣定義之後,有幾個特性要注意咯

    a)棧空的條件S.next=NULL

    b)元素e的出棧操作:新建一個結點存放元素e,然後用一個指標p指向它,將結點p插入到頭結點之後

    2. 初始化鏈棧InitStack(LinkStNode &s)

    void InitStack(LinkStNode &s){

    s= (LinkStNode *)malloc(sizeof(LinkStNode));

    s->next = NULL;

    }

    3. 進棧Push(LinkStStack&s,ElemType e)void Push(LinkStNode &s,ElemType e){

    LinkStNode *p;

    p=(LinkStNode *)malloc(sizeof(LinkStNode));

    //新建結點

    p->data = e;

    p->next =s->next;

    //將結點p插入到頭結點之後

    s->next = p;

    }

    這個鏈式頭結點和前面的概念有點不一樣啊!!

    每次插入元素都放在頭結點之後,然後頭結點就是棧頂~

    4. 出棧Pop(LinkStNode &s,ElemType &e)

    void Pop(LinkStNode &s,ElemType &e){

    LinkStNode *p;

    if(s->next == NULL)

    return 0;

    p = s->next;

    e= p->data;

    //提取資料

    s->next = p->next;

    free(p);

    //釋放被刪結點的儲存空間

    return 1;

    }

    5. 取棧頂元素getTop(LinkStNode &s,ElemType &e)

    void GetTop(LinkStNode &s,ElemType &e){

    if(s->next == NULL)

    return 0;

    e = s->next->data;

    return 1;

    }

    6. 判斷棧是否為空StackEmpty(LinkStNode *s)

    bool StackEmpty(LinkStNode *s){

    return (s->next== NULL);

    }

  • 3 # 我是蛋卷

    如果是C++,可以用模版來實現,更進一步,可能也不用自己寫,std庫中就有。

    如果是C,有幾種做法,char是比int短的,可以申請一個union結構來存;還有一種做法是存一個萬能的void *吧,用的時候轉一下型。

  • 中秋節和大豐收的關聯?
  • 有人說“當你遇到對的愛情,就是遇到最真實的自己”你認同這句話嗎?為什麼?