鏈式棧是一種特殊的鍊錶,下面實現的**是基於鍊錶而來的,請參考前幾篇的部落格
linkstack.h
#ifndef _my_linkstack_h_
#define _my_linkstack_h_
typedef void linkstack;
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);
#endif //_my_linkstack_h_
linkstack.c
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "linkstack.h"
#include "linklist.h"
typedef struct _tag_linkstacknode
tlinkstacknode;
//我要建立乙個linkstack,準備用linklist去模擬實現
//相當於在 linkstack.c中寫 linklist庫的測試程式。。。。。。
linkstack* linkstack_create()
void linkstack_destroy(linkstack* stack)
void linkstack_clear(linkstack* stack)
return ;
}//向棧中放元素,相當於 向線性表中插入乙個元素
int linkstack_push(linkstack* stack, void* item)
pte->item = item;
//頭插法 ,向線性表中插入元素,只不過是插入元素的時候,需要構造業務節點而已。。。。。。
ret = linklist_insert(stack, (linklistnode *)(&pte->node),0 );
if (ret != 0)
return ret;
}void* linkstack_pop(linkstack* stack)
myitem = ptmp->item;
//注意向線性表中,插入元素的時,打造節點,分配記憶體;
//彈出元素時,需要釋放節點記憶體,不要忘記
if (ptmp != null)
return myitem;
}void* linkstack_top(linkstack* stack)
myitem = ptmp->item;
return myitem;
}int linkstack_size(linkstack* stack)
測試.c
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "linkstack.h"
void main()
printf("top: %d \n", *((int *)linkstack_top(stack)));
printf("size: %d \n", linkstack_size(stack));
//刪除棧中所有元素
企業級棧的鏈式儲存
ifndef linkstack h define linkstack h include include include 鏈式棧的結點 typedef struct linknode linknode 鏈式棧 typedef struct linkstack linkstack 初始化函式 lin...
《資料結構 棧》鏈式儲存
一 鏈式儲存 和 順序結構 對比?棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1 如果棧的數量可預知,則使用順序棧,否則,則使用鏈棧 鏈棧 要求每個元素都有指標域,增加了記憶體開銷,但對於長度無限制。二 棧 鏈式結構 棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1...
資料結構 棧 棧的鏈式儲存結構
資料結構 棧 棧的鏈式儲存結構 用頭插法建立的鏈棧,棧頂元素為s next所指結點 date 2017 4 14 include include define initsize 100 define elemtype char typedef struct lnode linkstack void ...