棧是一種先進後出的儲存結構
結構示意圖
使用順序儲存-陣列形式
利用陣列來儲存棧,陣列尾部做棧頂,棧的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如同中學的游標卡尺的游標,它可以來回移動,意味著棧頂的...