棧的鏈式儲存結構與順序儲存結構開口方向應相反,因為對鍊錶的頭部操作會減少對鍊錶的遍歷,所以我們選用第二種結構
同時我們基於線性表的鏈式儲存實現棧的鏈式儲存,線性表的鏈式儲存實現見:
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 鏈棧 棧的鏈式儲存結構
前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂...