棧的鏈式儲存結構

2021-09-29 13:50:58 字數 2420 閱讀 4896

棧的鏈式儲存結構與順序儲存結構開口方向應相反,因為對鍊錶的頭部操作會減少對鍊錶的遍歷,所以我們選用第二種結構

同時我們基於線性表的鏈式儲存實現棧的鏈式儲存,線性表的鏈式儲存實現見:

linkstack.**件

#include "stdio.h"

#include "linklist.h"

typedef void linkstack;

typedef struct _tag_linkstacknode

tlinkstacknode;

linkstack* linkstack_create();

void linkstack_destroy(linkstack* stack);

void linkstack_clear(linkstack* stack);

int linkstack_push(linkstack* stack, void* item);

void* linkstack_pop(linkstack* stack);

void* linkstack_top(linkstack* stack);

int linkstack_size(linkstack* stack);

linkstack.c檔案

#include "linkstack.h"

//建立鏈式棧,相當於建立乙個鏈式線性表

linkstack* linkstack_create()

//銷毀線性表

void linkstack_destroy(linkstack* stack)

//清空乙個棧,相當於清空乙個鍊錶

//清空棧的時候棧元素宣告週期的管理

//所有入棧的節點都是malloc,若要清空棧,需要把所有的元素彈出,並釋放節點記憶體

void linkstack_clear(linkstack* stack)

while(linkstack_size(stack) > 0)

return ;

}//向棧中新增元素,相當於向線性表的頭部插入元素

int linkstack_push(linkstack* stack, void* item)

memset(node,0,sizeof(tlinkstacknode));

node->item = item;

rec = linklist_insert(stack,(linklistnode*)node,0);

if (rec != 0)

return -1;

} return 0;

}//從棧中彈出元素,相當於從線性表的頭部刪除元素

void* linkstack_pop(linkstack* stack)

item = tem->item;//把線性表的業務節點轉換成棧的業務節點

//因為linklist_insert的時候分配了記憶體,所以linklist_delete釋放記憶體

free(tem);

return item;

}//獲取棧頂元素,相當於獲取鍊錶的第乙個元素

void* linkstack_top(linkstack* stack)

node = (tlinkstacknode*)linklist_get(stack,0);

if (node == null)

item = node->item;

return item;

}//求棧的大小

int linkstack_size(linkstack* stack)

return linklist_length(stack);

}

main.c檔案

#include "stdio.h"

#include "linkstack.h"

void main()

//新增元素

for (i = 0; i< 10 ;i++)

printf("len:%d\n",linkstack_size(stack));

printf("top:%d ",*((int *)linkstack_top(stack)));

printf("\n");

//刪除元素

while(linkstack_size(stack) > 0)

printf("\n");

//銷毀棧

linkstack_destroy(stack);

system("pause");

}

輸出結果:

棧 鏈式儲存結構

講完了棧的順序儲存結構,現在來看棧的鏈式儲存結構,簡稱為鏈棧。想想看,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部?由於單鏈表有頭指標,而棧頂指標也是必須的,所以比較好的辦法是把棧頂放在單鏈表的頭部。都已經有了棧頂在頭部了,單鏈表中常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭...

棧(鏈式儲存結構)

通常由乙個一維陣列和乙個棧頂元素變數組成 如下 define maxsize struct stacknode struct stacknode createstack void push struct stacknode s,elementtype x elementtype pop struct...

鏈式儲存mysql 鏈棧 棧的鏈式儲存結構

前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂...