#ifndef _my_linkstack_h_#define _my_linkstack_h_typedef
void
linkstack;
//建立鍊錶棧
linkstack*linkstack_create();
//銷毀鍊錶棧
int linkstack_destroy(linkstack**stack);
//清空鍊錶棧
int 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_
//鏈式棧**實現
#include#include
#include
#include
"linklist.h"//
呼叫鍊錶動態庫
#include"
linkstack.h"/*
自己構造結構體的必要性
鍊錶棧是呼叫線性鍊錶動態庫實現的 線性鍊錶必須要求結構體中有linknode型別的屬性
但是使用者未必會讓自己的結構體帶這個屬性,必須由棧實現方法裡帶上
*/typedef
struct
_tlinkstacktlinkstack;
//建立鍊錶棧
linkstack*linkstack_create()
//銷毀鍊錶棧
int linkstack_destroy(linkstack**stack)
//清空鍊錶棧
/*因為tlinkstack是我們幫使用者建立的,不是使用者自己的結構體,所以使用者不可能會釋放,只能由我們來實現
必須迴圈遍歷 乙個個的刪除
*/int linkstack_clear(linkstack*stack)
}//將元素個數置零
erro_msg =linklist_clear(stack);
return
erro_msg;}//
壓棧/*
對於鍊錶而言,從尾部插入,需要遍歷前面的所有節點,還是從頭結點插入比較效率
*/int linkstack_push(linkstack* stack, void*item)
//初始化記憶體
memset(tstack, 0, sizeof
(tlinkstack));
//將使用者資料賦值到記憶體中
tstack->item =item;
//用頭插法插入元素
erro_msg=linklist_insert(stack, (linknode *)tstack, 0
);
return
erro_msg;}//
出棧void* linkstack_pop(linkstack*stack)
return
ret;}//
獲取棧頂元素
void* linkstack_top(linkstack*stack)
return
ret;}//
獲取棧的大小
int linkstack_size(linkstack*stack)
//鍊錶棧的測試**
#define _crt_secure_no_warnings#include
#include
#include
#include
"linkstack.h
"typedef
struct
_studentstudent;
void
test()
ret = linkstack_push(stack, &s2);
if (ret != 0
)
ret = linkstack_push(stack, &s3);
if (ret != 0
)
ret = linkstack_push(stack, &s4);
if (ret != 0
)
ret = linkstack_push(stack, &s5);
if (ret != 0
)
numx =linkstack_size(stack);
//出棧
for (i = 0; i < numx; i++)
//清空棧
ret =linkstack_clear(stack);
if (ret != 0
)
//銷毀棧
linkstack_destroy(&stack);
}void
main()
資料結構 線性表(陣列 鍊錶 棧 佇列)
線性邏輯結構特徵 集合中存在唯一的第乙個資料元素 最後乙個資料元素,集合中剩餘的每個資料元素均有唯一的直接前驅元素和唯一的直接後繼元素 它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。陣列的空間是從棧分配的。陣列優點 簡單易用 訪問元素快 常數時間 陣列缺點 大小固定 是靜態的 並且要在使用...
資料結構 線性結構 雙向鍊錶
雙向鍊錶 就是在單向鍊錶的基礎上加了乙個pre 指向該節點的前乙個節點 域,其他的沒有改變,在對鍊錶進行增刪相關操作時在單向鍊錶的基礎上多以乙個向前節點連線的動作即可。因為有了指向前乙個節點域,所以雙向在查詢資料上比單向的速度要快。1 2 雙向鍊錶3 4class doublelinkedlist ...
資料結構 線性表 鍊錶
在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...