資料結構與演算法 3棧的順序儲存

2021-09-29 17:42:35 字數 3844 閱讀 7490

棧是線性表的一種特例,它使得資料先入後出,就行壘磚似的最先壘的磚在最下面但是取的時候需要最後才能取到,最後壘的磚在最上面,但是取的時候是第乙個取走。

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 約定列表的最後乙個元素為...