棧的順序儲存的實現

2021-09-29 13:46:51 字數 1816 閱讀 7132

棧是一種先進後出的結構,他是一種特殊的線性表,棧的資料元素之間的一一對應的關係可以利用順序的儲存來表示, 那麼可以利用陣列來實現棧資料結構。

在第二種結構中,從陣列開始位置進行操作,對棧進行操作時會涉及到大量的陣列的移動和刪除,而第二種從尾部操作則會避免不必要的操作,所以我們選用第一種結構。同時由於棧是一種特殊的線性表,所以直接基於以前實現的線性表來實現棧的順序儲存,線性表的順序儲存見:

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 初...