資料結構 順序棧的實現方式一

2021-10-10 17:04:51 字數 2301 閱讀 8952

這是第二次學習資料結構,第一次學習資料結構的時候用的語言是cpp,因為不是主要專業課,所以沒有靜下來踏踏實實練習,導致經過一段時間之後對於概念還能理解,但是一碰上**就麻爪。(當時還是年輕啊,現在想起來一把辛酸淚…

這學期有機會再一次接觸資料結構,嘗試以c語言完成**實現。

關於順序棧,似乎主要有兩種實現方式,一種僅用乙個指標,即top,另一種涉及兩個指標,即base和top。個人的理解是,前者用的是靜態陣列的實現方式,後者則是動態陣列(也就是涉及c中的malloc)。因為對指標的使用還沒有徹底弄懂,對第二種實現方式也有很多疑問,目前還在鑽研,所以先把第一種方式的筆記放上來以做記錄。

/*本文件用來總結棧的基本操作*/

/*順序棧*/

#include

#include

#define maxsize 100

#define elemtype int

#define status int

#define ok 1

#define error 0

/*順序棧的實現方式1*/

typedef

struct

stack;

void

initstack

(stack *s)

status push

(stack *s, elemtype e)

intemptystack

(stack *s)

/*關於函式形參要用指標傳遞還是值傳遞的問題*/

/*值傳遞 傳遞的是主函式中值的副本 在定義的函式中對此副本進行的操作並不能影響主函式的該元素的值

即: int x = 10;

f(x);

printf("...",x); x結果為10,f(x)中的操作無法體現

一種方式是利用函式的返回值

int x = 10,y;

y = f(x);

printf("...",y); y的結果為f(x)中的操作後x的值

這種方式僅限於返回值為數值型且返回值為1個,2個則不成立(因為函式的返回值只能乙個)

另一種方式則是 利用指標,即指標傳遞

指標傳遞 傳遞的是元素的位址,函式黑匣子中對該元素進行的操作能夠影響到主函式中的值

限制對指標的操作,即保護資料要用的const,這是另外的問題(也是c裡最重要的問題之一)

再另外一種方式則是用cpp中的引用運算子&,不過c中無此操作

*/status gettopstack

(stack *s, elemtype *x)

status pop

(stack *s,elemtype *x)

status destroystack

(stack *s)

;//個人理解 有待考證 可能等我研究完malloc就能回答了(?

/*結構體中定義的是陣列,屬於靜態儲存分配,由編譯器/系統完成它的分配與釋放,銷毀棧的函式可以不定義

但是運用base,top指標這種方式,動態申請記憶體的順序棧需要銷毀*/

status clearstack

(stack *s)

intstacklength

(stack *s)

void

display

(stack *s)

//最好不要用和maxsize扯上關係,因為不確定是否是滿棧(即不要採用for迴圈然後以maxsize為邊界的方式

while

(s->top!=-1

)}//另外一種方式是定義visit函式,然後display中呼叫visit來printf資料,visit失敗則返回error(display為 status型)

intmain

(void

)printf

("此時棧頂元素為:");

gettopstack

(&s,

&m);

printf

("%d\n"

,m);

printf

("彈出棧頂元素為:");

pop(

&s,&m)

;printf

("%d\n"

,m);

printf

("棧中還有元素個數/棧的長度為:");

printf

("%d\n"

,stacklength

(&s));

printf

("棧中元素為:");

display

(&s)

;return0;

}

如有錯誤,還請多多指教~

資料結構遍歷順序棧 資料結構 順序棧的實現

資料結構 順序棧的實現 1 快速開始 棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 先出,先入後出。除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。2 實現棧 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者...

資料結構 順序棧的實現

棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者鍊錶的。那麼,我們的重點是維護一種規則,即後進先出。我們始終要有乙個變數l來記錄最後乙個元素的位置 當彈出時,將l位置...

資料結構 棧的順序的實現

include include define stack size 100 棧的初始容量 define stackincrease 10 每次的增量 typedef int elemtype typedef structsqstack bool initstack sqstack s void cl...