C 棧和佇列 ADT 棧的表示和實現

2021-09-30 14:25:36 字數 3232 閱讀 7847

棧底指標是不動的,插入,刪除都是對棧頂指標進行移動

基本操作的實現:棧的構造,判空,插入,刪除,清空,銷毀,列印

棧的定義:

typedef structsqstack;
棧的基本操作:

/*操作構造乙個空棧s。*/

initstack(&s);

/*初始條件:棧s已存在。*/

/*操作結果:棧s被銷毀。*/

destroystack(&s);

/*初始條件:棧s已存在。*/

/*操作結果:將s清為空棧。*/

clearstack(&s);

/*初始條件:棧s已存在。*/

/*操作結果:若棧s為空棧,則返回true,否則false*/

stackempty(s);

/*初始條件:棧s已存在。*/

/*操作結果:返回s的元素個數,即棧的長度。*/

stacklength(s);

/*初始條件:棧s已存在且非空。*/

/*操作結果:用e返回s的棧頂元素。*/

gettop(s,&e);

/*初始條件:棧s已存在。*/

/*操作結果:插入元素e為新的棧頂元素。*/

push(&s,e);

/*初始條件:棧s已存在且非空。*/

/*操作結果:刪除s的棧頂元素,並用e返回其值。*/

pop(&s,&e);

/*初始條件:棧s已存在且非空。*/

/*操作結果:輸出對棧中的元素進行*/

void printstack(s);

構造乙個空棧====

status initstack(sqstack &s)

else

}

銷毀棧====

status destroystack(sqstack &s)

清空棧====

clearstack(&s);

status clearstack(sqstack &s)

判空棧====

status stackempty(sqstack s)

判斷棧中的長度====

status stacklength(sqstack s)

得到棧頂元素(用e返回)====

status gettop(sqstack s,elemtype &e)

else

}

棧頂插入資料元素e====

status push(sqstack &s,elemtype e)

else

}

刪除棧頂元素====

status pop(sqstack &s,elemtype &e)

else

}

顯示棧中的資料元素====

void printstack(sqstack s)

while(s.top!=s.base)

printf("\n");

}

嗯下面就是在vc上的測試:

#include#include#include#define ok 1

#define error 0

#define true 1

#define false 0

#define overflow -2

#define stack_init_size 100 //儲存空間初始化分配量

#define stackincrement 10 //儲存空間分配增量

typedef int elemtype;

typedef int status;

typedef structsqstack;

status initstack(sqstack &s)

else

}status destroystack(sqstack &s)

status clearstack(sqstack &s)

status stackempty(sqstack s)

status stacklength(sqstack s)

status gettop(sqstack s,elemtype &e)

else

}status push(sqstack &s,elemtype e)

else

}status pop(sqstack &s,elemtype &e)

else

}void printstack(sqstack s)

while(s.top!=s.base)

printf("\n");

}int main()

{ int n;

int ch;

int num;

sqstack stack;

initstack(stack);

if(initstack)

printf("棧構建成功!\n");

else

printf("棧構建失敗!\n");

printf("************************************\n");

printf("1、插入棧頂元素\n2、刪除棧頂元素\n3、返回棧頂元素\n");

printf("4、返回棧的長度\n5、判斷是否空棧\n6、清空棧內元素\n");

printf("7、輸出棧內元素\n8、銷毀棧\n9、退出操作");

printf("************************************\n");

printf("請選擇接下來要進行的操作:");

while(scanf("%d",&ch)&&ch!=9)

{ if(ch==1){

printf("請輸入入棧個數:");

scanf("%d",&num);

printf("請依次輸入入棧元素資料:\n");

for(int i=0;i

棧和佇列的表示及實現

鏈棧的表示 佇列的基本表示及操作 鏈佇列一般線性表 棧邏輯結構 一對一 邏輯結構 一對一 儲存結構 順序表 鍊錶 儲存結構 順序表 鍊錶 運算規則 隨機訪問 運算規則 後進先出 lifo adt stack 資料關係 r1 約定an端為棧頂,a1端為棧底。基本操作 adt stack利用一組位址連續...

棧和佇列的陣列表示

棧和佇列 都是動態集合,且在其上進行delete操作所移除的元素都是預先設定的。在棧 stack 中,被刪除的都是最近插入的元素 棧實現的是一種後進先出的策略。類似的,在佇列中,被刪除的總是在集合中存在時間最長的那個元素 佇列實現的是一種先進先出的策略。在計算機上實現棧和佇列有好幾種有效方式。本文將...

棧的表示和實現

棧是僅能在表尾 棧頂 進行插入或刪除操作的 線性表 後進後出 基本操作 初始化,判斷是否為空棧,取棧頂元素,插入新的棧頂元素。非空棧中棧頂指標始終在棧頂元素的下乙個位置 分為順序棧 include include typedef struct sqstack void initial sqstack...