資料結構 棧之鏈棧

2021-10-05 12:53:04 字數 1349 閱讀 4477

鏈棧:單鏈表的頭插和頭刪時間複雜度o(1),所以鏈式棧的棧頂在頭這邊

(1)基於鍊錶(帶頭結點的單鏈表)實現棧先進後出的特徵

(2)對於棧,必須同乙個方向入棧和出棧

(3)對於鍊錶,有頭插、頭刪,尾插和尾刪

時間複雜度:o(1)不需要迴圈遍歷,比如判斷乙個數是否為10,if(a==10);

o(n)需要迴圈遍歷,迴圈的次數由係數決定,比如for迴圈,while迴圈;

o(n^2)資料巢狀遍歷,以雙向迴圈的方式遍歷;

(4)入棧和出棧用頭插法和頭刪法的時間複雜度都為o(1),尾插法和尾刪法時間複雜度均為o(n);時間複雜度越高,效率越低,因此選擇頭插法和頭刪法。

鏈棧的結構體:

typedef int elemtype

typedef struct node

node,,stack,*pstack;//stack為棧

初始化:

void init(pstack pst)

}

壓棧:

(1)開闢乙個新結點

node* buynode(elemtype val)

(2)

void push(pstack pst,elemtype val)//元素做乙個鍊錶的頭插

出棧:

(1)判空

int empty(pstack pst)

(2)

int pop(pstack pst)//鍊錶的頭刪,棧的出棧

node* pcur=pst->next;

pst->next=pcur->next;

free(pcur);

return 1;

}

獲取資料:鏈棧中棧頂指標相當於頭結點

int gettop(pstack pst,elemtype* prt)

*prt=pst->next->data;

return 1;

}

鏈棧的銷毀:

void destroy(pstack pst)

pst->next=null;

}

主函式:

int main()

int rt=0;

int flag=gettop(&st,&rt);

if(flag)

return 0;

}

資料結構 棧 鏈棧

棧的插入和刪除只在棧頂進行操作,在單鏈表中,頭指標是單鏈表的必須元素 而在棧中,棧頂指標也是鏈棧的必須元素,且一般將棧頂放在單鏈表的頭部。線性表有順序儲存結構和鏈式儲存結構,棧屬於線性表的一種,也具有順序儲存結構和鏈式儲存結構。對於棧的鏈式儲存結構,一般稱之為鏈棧。棧的特點 先進後出 棧函式實現 1...

資料結構之鏈棧

本次為大家帶來的是資料結構中的鏈棧,鏈棧就是儲存結構是鏈式的 鏈棧的定義 typedef struct node node node top 和單鏈表的定義並無二致,僅僅多了乙個top指標,關鍵在於使用者如何使用的。鏈棧包括 建立鍊錶 和單鏈表的頭插法一樣 壓棧 pushstack 彈棧 popst...

《資料結構》之鏈棧

廢話不多說,直接上 實現。include define ok 1 define error 0 using namespace std typedef int selemtype typedef int status typedef struct stacknode stacknode,linkst...