1. 程式人生 > >資料結構學習筆記——堆疊之鏈式儲存結構(c語言實現)

資料結構學習筆記——堆疊之鏈式儲存結構(c語言實現)

棧的鏈式儲存結構使用單鏈表實現,同線性表一樣,鏈式儲存結構的堆疊在儲存空間的利用上顯得更加靈活,只要硬體允許一般不會出現溢位的情況。但鏈式棧相對於順序棧稍顯麻煩,若所需堆疊空間確定,順序棧顯得方便一些。關於鏈式和順序式的選擇視具體情況而定。

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;
}