鏈棧:單鏈表的頭插和頭刪時間複雜度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...