棧是一種先進後出的結構,他是一種特殊的線性表,棧的資料元素之間的一一對應的關係可以利用順序的儲存來表示, 那麼可以利用陣列來實現棧資料結構。
在第二種結構中,從陣列開始位置進行操作,對棧進行操作時會涉及到大量的陣列的移動和刪除,而第二種從尾部操作則會避免不必要的操作,所以我們選用第一種結構。同時由於棧是一種特殊的線性表,所以直接基於以前實現的線性表來實現棧的順序儲存,線性表的順序儲存見:
seqstack.**件:
#include "stdio.h"
#include "seqlist.h"
typedef void seqstack;
seqstack* seqstack_create(int capacity);
void seqstack_destroy(seqstack* stack);
void seqstack_clear(seqstack* stack);
int seqstack_push(seqstack* stack,void* item);
void* seqstack_pop(seqstack* stack);
void* seqstack_top(seqstack* stcak);
int seqstack_size(seqstack* stack);
int seqstack_capacity(seqstack* stack);
seqstack.c檔案:
#include "seqstack.h"
//建立棧,相當於建立乙個線性表
seqstack* seqstack_create(int capacity)
//銷毀棧,相當於銷毀乙個線性表
void seqstack_destroy(seqstack* stack)
//清空棧,相當於清空乙個線性表
void seqstack_clear(seqstack* stack)
int seqstack_push(seqstack* stack,void* item)
//從棧中彈出元素,相當於從鍊錶的尾部拿出元素
void* seqstack_pop(seqstack* stack)
//獲取棧頂元素,相當於獲取鍊錶的尾部元素
void* seqstack_top(seqstack* stack)
int seqstack_size(seqstack* stack)
int seqstack_capacity(seqstack* stack)
main.c檔案
#include "seqstack.h"
int main()
for(i = 0;i < 5;i++)
printf("capacity:%d\n",seqstack_capacity(stack));
printf("size:%d\n",seqstack_size(stack));
printf("top:%d\n",*((int*)seqstack_pop(stack)));
while(seqstack_size(stack) > 0)
printf("\n");
system("pause");
return 1;
}
輸出結果:
棧的順序儲存實現
首先要認識到viod p 2 表示的是兩個建立乙個包含兩個元素的陣列,每個元素是void 型別。即 void p 2 和這種寫法相同 void p0 void p1 採用份檔案的形式使用vs2013 c語言 編寫 ifndef seqstack h define seqstack h include...
棧的順序儲存結構實現。
ifndef stack h define stack h define size 5 typedef structstack 初始化棧的儲存區 void stack init stack 清理棧的儲存區 void stack deinit stack 判斷棧是不是滿了 int stack full...
棧的順序儲存(陣列實現)
棧是只允許一一端進行操作的的線性表,首先強調的是棧是一種線性表,其次棧只限定在一端進行操作。initstack 初始化棧 stackempty 判斷棧空 push 進棧 pop 出棧 gettop 獲取棧頂元素 destorystack 銷毀棧 初始化typedef struct sqstack 初...