資料結構學習筆記——堆疊之鏈式儲存結構(c語言實現)
阿新 • • 發佈:2018-12-19
棧的鏈式儲存結構使用單鏈表實現,同線性表一樣,鏈式儲存結構的堆疊在儲存空間的利用上顯得更加靈活,只要硬體允許一般不會出現溢位的情況。但鏈式棧相對於順序棧稍顯麻煩,若所需堆疊空間確定,順序棧顯得方便一些。關於鏈式和順序式的選擇視具體情況而定。
1.棧的鏈式儲存結構:
程式碼示例:
typedef int Status; typedef int ElemType; //結點 typedef struct StackNode { ElemType data; //結點資料域 struct StackNode *next;//結點指標域 }StackNode,*StackLinkPtr; //鏈棧的資料結構 typedef struct LinkStack { StackNode *top;//棧頂結點 int count;//元素個數 }LinkStack;
2.進棧:
① :資料裝入新結點,並將結點加入連結串列 ②~③:棧頂指向新結點(更新棧頂指標指向) 程式碼示例:
Status push(LinkStack *stack,ElemType e) { if (!stack) { return 0; } StackLinkPtr newnode=(StackLinkPtr)malloc(sizeof(StackNode));//為結點申請記憶體空間 newnode->data=e;//資料裝入結點 newnode->next=stack->top;//將當前棧的棧頂元素賦給新結點的後繼,即將newnode加入連結串列 stack->top=newnode;//棧頂指向newnode(更新棧頂指標指向) stack->count++; return 1; }
3.出棧:
①~②:top指標後移 程式碼示例:
Status pop(LinkStack *stack,StackNode *gettop)
{
StackNode *p=stack->top;
if (!stack&&stack->count)
{
return 0;
}
//彈出
gettop->data=p->data;//棧頂資料給e
stack->top=p->next;//top指標下移
free(p);
stack->count--;
return 1;
}