資料結構與演算法 4棧的鏈式儲存

2021-10-01 02:34:59 字數 3721 閱讀 7821

上一章我們講了棧的線性儲存這裡我們將會講解棧的鏈式儲存,和線性表的順序儲存和鏈式儲存一樣。棧的鏈式儲存也解決了棧的順序儲存需要事先分配整塊儲存空間的問題。

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,void * value)

向棧中壓入元素,返回操作是否成功,成功返回真,反之返回假。

void *  pop(sstack *stack)

從棧中彈出乙個元素。改變棧的長度。

void * 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;

typedef struct stacknode

sstacknode,psstacknode;

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,void * value);

void * pop(sstack *stack);

void * gettop(sstack *stack);

void stackdisplay(sstack *stack);

#endif

#include #include #include "stack.h"

static const int stackmask=max;

sstack * stackinit()

return stack;

}void stackdestory(sstack *stack)

}void stackclear(sstack *stack)

stack->len=0;

}}int stacklength(sstack *stack)

return stack_err;

}bool stackempty(sstack *stack)

return false;

}bool stackfull(sstack *stack)

return false;

}bool push(sstack *stack,void * value)

return false;

}void * pop(sstack *stack)

return stack_err;

}void * 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;

}

資料結構與演算法 005 棧的鏈式儲存結構

棧的鏈式儲存結構,簡稱為鏈棧。棧因為只是棧頂來做插入和刪除操作,所以比較好的方法是將棧頂放在單鏈表的頭部,棧頂指標和單鏈表的指標合二為一。描述一下儲存過程,當來了乙個新的元素newnode,我們讓它先指向下乙個元素,即原來的棧頂元素,使用newnode.next top,然後讓top指向新的元素ne...

《資料結構 棧》鏈式儲存

一 鏈式儲存 和 順序結構 對比?棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1 如果棧的數量可預知,則使用順序棧,否則,則使用鏈棧 鏈棧 要求每個元素都有指標域,增加了記憶體開銷,但對於長度無限制。二 棧 鏈式結構 棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1...

資料結構 棧 棧的鏈式儲存結構

資料結構 棧 棧的鏈式儲存結構 用頭插法建立的鏈棧,棧頂元素為s next所指結點 date 2017 4 14 include include define initsize 100 define elemtype char typedef struct lnode linkstack void ...