棧的鏈式存儲結構


1 鏈式存儲結構
  棧的鏈式存儲結構,簡稱鏈棧。
  由於棧只是棧頂在做插入和刪除操作,所以棧頂應該放在單鏈表的頭部。另外,都有了棧頂在頭部了,單鏈表中的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭結點的。

  對於鏈棧來說,基本不存在棧滿的情況,除非內存已經沒有使用空間了。
  對於空棧來說,鏈表原來的定義是頭指針指向空,那么鏈棧的空其實就是top=NULL。

 鏈棧的結構代碼如下:

typedef struct StackNode {
    SElemType data;
    Struct StackNode *next;
}StackNode;
typedef
struct StackNode *LinkStackPtr; typedef struct LinkStack { LinkStackPtr top;
int count; }LinkStack;


2 進棧操作

 

Status push(LinkStack *S, SElemType e) {

    LinkStackPtr node = (LinkStackPtr)malloc(sizeof(StackNode));
    node->data = e;
    node->next = S->top;

    S->top = node;
    S->count ++;

    return OK;
}


3 出棧操作

Status pop(LinkStack *S, SElemType *e) {

    LinkStackPtr p;

    if (S->top == NULL) {
        return ERROR;
    }

    *e = S->top->data;
    p = S->top;

    S->top = S->top->next;
    S->count --;

    free(p);            //釋放結點p

    return OK;
}


4 對比順序棧和鏈棧

  順序棧和鏈棧的時間復雜度都為O(1). 如果棧的使用過程中元素變化不可預期,有時會很大,有時會很小,則選擇使用鏈棧。反之,如果它的變化在可控范圍內,選擇使用順序棧比較好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM