棧的順序儲存結構實現(四)

2021-09-01 03:03:41 字數 1641 閱讀 9335

18.11.17

棧是一種只限定在表尾進行插入和刪除的線性表,這裡的表尾指的是棧頂,而不是棧尾,所以棧又被稱為先進後出的線性表,也就是說棧是乙個類似於木桶之類存在,先放進去的後拿出來

我們通常用乙個變數top來標誌棧頂元素的變化,若棧的長度為stacksize,那麼top的值就必須小於stacksize,例如,當棧中只有乙個元素時,top等於0,當棧中沒有元素時,即棧為空棧,top等於-1

既然是順序儲存結構實現棧,自然少不了陣列出席,這可比鏈式簡單多了,先定義個棧的結構,其形式跟線性表的順序儲存結構真的很像,非常非常像,線性表裡邊是有乙個陣列加乙個整型變數存長度,而順序棧裡邊是乙個陣列加乙個整型變數top存棧尾的位置,**如下

結構定義

typedef structsqstack;//將棧的型別命名為sqstack
跟順序儲存實現的線性表很像,它是使線性表的長度length等於0,而在棧這邊,是使top等於-1(棧空時top==-1)

void createstack(sqstack *s)
在棧還不是滿的情況下,每進乙個元素,top加一

int push(sqstack *s,selemtype e)
有進就得有出,出棧函式要求我們將彈出的元素儲存下來,在棧不空的情況下,將彈出元素賦給乙個指標,然後top減1

int pop(sqstack *s,selemtype *e)

*e=s->data[s->top];

s->top--;

return 1;

}

注意以上的入棧和出棧函式均未涉及任何迴圈

所以時間複雜度為o(1)

我們不知道棧裡面的情況折騰的怎麼樣了,需要乙個列印函式來檢視,很簡單,將棧中的陣列列印出來就好了

int printstack(sqstack s)sqstack;

//函式宣告

void createstack(sqstack *s);

int push(sqstack *s,selemtype e);

int pop(sqstack *s,selemtype *e);

int printstack(sqstack s);

int main()

printf("此時棧中元素為");

printstack(s);

for(i=0;i<11;i++)

}void createstack(sqstack *s)

int push(sqstack *s,selemtype e)

int pop(sqstack *s,selemtype *e)

*e=s->data[s->top];

s->top--;

return 1;

}int printstack(sqstack s){

int i;

for(i=0;i除錯結果如下

棧的順序儲存結構實現。

ifndef stack h define stack h define size 5 typedef structstack 初始化棧的儲存區 void stack init stack 清理棧的儲存區 void stack deinit stack 判斷棧是不是滿了 int stack full...

棧的順序儲存結構及實現

棧是線性表的特例,棧只在棧頂進行插入及刪除操作,因此資料是後進先出。棧的順序儲存其實也是線性表順序儲存的簡化。棧的結構定義如下 進棧操作push,其 如下 插入元素e為新的棧頂元素 stauts push sqstack s,selemtype e s top 棧頂指標 1 s data s top...

棧的順序儲存結構

標頭檔案 函式的宣告 include include include define stacksize 100 typedef int elemtype typedef struct seqstack void initstack seqstack s 初始化棧 int stackempty seq...