棧是線性表的一種特例,它使得資料先入後出,就行壘磚似的最先壘的磚在最下面但是取的時候需要最後才能取到,最後壘的磚在最上面,但是取的時候是第乙個取走。
typedef struct stack
sstack,*psstack;
這裡是使用的int型的資料,data陣列為棧空間,最多資料元素為max個,top指向棧的棧頂。
sstack * stackinit()
用於建立棧申請棧空間,返回非0值表示初始化棧成功返回值為棧位址,返回0表示失敗。
void stackdestory(sstack *stack)
釋放申請的棧空間,需要傳入建立棧時返回的位址,無返回值。
void stackclear(sstack *stack)
將存在的棧設定為空棧,需要傳入建立棧時返回的位址,無返回值。
int stacklength(sstack *stack)
獲取棧中資料元素的數量,需要傳入建立棧時返回的位址,返回棧中元素的數量。
bool stackempty(sstack *stack)
判斷棧是否為空棧,需要傳入建立棧時返回的位址,返回棧是否為空棧的結果。
bool stackfull(sstack *stack)
判斷棧是否為滿棧,需要傳入建立棧時返回的位址,返回棧是否為滿棧的結果。
bool push(sstack *stack,int value)
將資料壓入棧,需要傳入建立棧時返回的位址和要壓入的資料的值,返回將資料壓入棧的結果。
int pop(sstack *stack)
彈出棧頂的元素,需要傳入建立棧時返回的位址,返回棧頂的元素的值。
int gettop(sstack *stack)
獲取棧頂元素,但是不更改棧的結構即棧頂元素不出棧,需要傳入建立棧時返回的位址,返回棧頂元素的值。
void stackdisplay(sstack *stack)
顯示棧中所有的元素,需要傳入建立棧時返回的位址。
#ifndef _stack_h
#define _stack_h
#define max 4
#define stack_ok 0
#define stack_err -1
#define true 1
#define false 0
typedef int bool;
typedef struct stack
sstack,*psstack;
sstack * stackinit();
void stackdestory(sstack *stack);
void stackclear(sstack *stack);
int stacklength(sstack *stack);
bool stackempty(sstack *stack);
bool stackfull(sstack *stack);
bool push(sstack *stack,int value);
int pop(sstack *stack);
int gettop(sstack *stack);
void stackdisplay(sstack *stack);
#endif
#include #include #include "stack.h"
static const int stackmask=max-1;
sstack * stackinit()
return stack;
}void stackdestory(sstack *stack)
}void stackclear(sstack *stack)
}int stacklength(sstack *stack)
return stack_err;
}bool stackempty(sstack *stack)
return false;
}bool stackfull(sstack *stack)
return false;
}bool push(sstack *stack,int value)
return false;
}int pop(sstack *stack)
return stack_err;
}int gettop(sstack *stack)
return stack_err;
}void stackdisplay(sstack *stack)
}}
#include #include "stack.h"
int main()
status=stackempty(stack);
if(status)
else
status=push(stack,11);
if(status)
else
status=stackempty(stack);
if(status)
else
status=push(stack,22);
if(status)
else
status=stacklength(stack);
printf("當前棧的長度為%d\n",status);
status=push(stack,33);
if(status)
else
status=stackfull(stack);
if(status)
else
status=stacklength(stack);
printf("當前棧的長度為%d\n",status);
status=gettop(stack);
printf("當前棧的棧頂的值為%d\n",status);
status=push(stack,44);
if(status)
else
status=stackfull(stack);
if(status)
else
stackdisplay(stack);
status=push(stack,55);
if(status)
else
status=stackfull(stack);
if(status)
else
status=stacklength(stack);
printf("當前棧的長度為%d\n",status);
status=gettop(stack);
printf("當前棧的棧頂的值為%d\n",status);
status=pop(stack);
printf("當前取棧的棧頂的值為%d\n",status);
status=stackfull(stack);
if(status)
else
status=stacklength(stack);
printf("當前棧的長度為%d\n",status);
status=gettop(stack);
printf("當前棧的棧頂的值為%d\n",status);
stackclear(stack);
status=stackempty(stack);
if(status)
else
status=stacklength(stack);
printf("當前棧的長度為%d\n",status);
stackdestory(stack);
return 0;
}
資料結構與演算法 順序儲存的棧
順序儲存的棧 實現檔案 include include include seqstack.h 建立乙個棧 seqstack ss create int maxlen 釋放乙個棧 void ss free seqstack ss 清空乙個棧 void ss makeempty seqstack ss ...
資料結構(棧 順序儲存 )
棧是特殊的線性表,規定插入和刪除在同一端進行 進行插入和刪除的那一端成為棧頂,另一端為棧底 插入為進棧,刪除為出棧 先進後出 ps 例如 abc進棧 出棧共有幾種情況 上溢 超出規定的空間大小還進行插入操作 下溢 棧中元素已經用完了還進行刪除操作 include include include de...
順序儲存 資料結構 棧
備註 以列表為基礎進行對此的封裝,以便達到棧的效果及作用 1 2棧的順序儲存結構 3重點 4 56 自定義棧異常 7class stackerror exception 8pass910 基於列表實現順序棧 11class sstack 12def init self 13 約定列表的最後乙個元素為...