3 棧 順序儲存

2022-09-19 15:00:12 字數 2079 閱讀 6573

棧是一種先進後出的儲存結構

結構示意圖

使用順序儲存-陣列形式

利用陣列來儲存棧,陣列尾部做棧頂,棧的size記錄當前棧內元素個數,也指示當前棧頂在陣列的哪個位置。

利用乙個結構體來管理棧,成員為size和乙個元素為void指標的陣列。棧只儲存指向資料的指標,所以也要注意資料的作用域。

要實現的介面

初始化、入棧(push)、出棧(pop)、獲取棧頂元素、獲取棧的大小、銷毀棧
mystack.c
#include"mystack.h"

#include#include//建立乙個元素為指標的陣列,陣列尾部做棧頂,減少資料操作

//初始化棧

mystacktype* init_stack()

//清零

memset(stack->stack, 0, sizeof(void*)*max_len);

stack->m_size = 0;

return stack;

}//入棧

void push_stack(mystacktype* st, void* data)

if(st->m_size >= max_len)

st->stack[st->m_size] = data;

st->m_size++;

}//出棧

void pop_stack(mystacktype* st)

if(st->m_size <= 0)

st->stack[st->m_size-1] = null;

st->m_size--;

}//獲取棧頂的資料

void* top_stack(mystacktype* st)

if(st->m_size <= 0)

return st->stack[st->m_size - 1];

}//棧資料大小

int size_stack(mystacktype* st)

return st->m_size;

}//銷毀棧

void destroy_stack(mystacktype** st)

mystack.h
#ifndef __mystack_h

#define __mystack_h

#define max_len 1024 //這裡是固定容量

typedef struct mystacktype;

mystacktype* init_stack();

void push_stack(mystacktype* st, void* data);

void pop_stack(mystacktype* st);

void* top_stack(mystacktype* st);

int size_stack(mystacktype* st);

void destroy_stack(mystacktype** st);

#endif

start0.c
#include"mystack.h"

#includestruct persion;

int main();

struct persion p2 = ;

struct persion p3 = ;

push_stack(st,&p1);

push_stack(st,&p2);

push_stack(st,&p3);

printf("size=%d\n",size_stack(st));

while(size_stack(st) > 0)

printf("size=%d\n",size_stack(st));

destroy_stack(&st);

return 0;

}

棧 順序儲存

棧頂指標top指向棧頂元素,初始化的時候棧為空top 1,出棧和入棧不涉及任何迴圈所以時間複雜度為o 1 includeusing namespace std define true 1 define false 0 define maxsize 20 typedef int elemtype ty...

棧順序儲存 鏈式儲存

1.棧的順序儲存之動態儲存 include include define ok 1 define false 0 define true 1 define stack init size 20 儲存空間初始分配量 define stackincrement 5 儲存空間分配增量 typedef in...

棧 順序儲存結

棧是線性表的特例,棧的順序儲存其實也是線性表順序的儲存的簡化,我們簡稱為順序棧。對於這種只能一頭插入,一頭刪除的線性表來說,下標為0的一端作為棧底比較好,因為首元素都存在棧底,變化最小。我們定義乙個top變數來指示棧頂元素在陣列中的位置,這top如同中學的游標卡尺的游標,它可以來回移動,意味著棧頂的...