由于棧是線性結(jié)構(gòu)的一種,所以,棧也可以通過(guò)順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了銅川免費(fèi)建站歡迎大家使用!
因?yàn)椋€性表的順序存儲(chǔ)結(jié)構(gòu)是通過(guò)數(shù)組實(shí)現(xiàn)的,所以,棧的順序存儲(chǔ)結(jié)構(gòu)也通過(guò)數(shù)組實(shí)現(xiàn)。不可避免的,要設(shè)置棧的最大存儲(chǔ)空間。因?yàn)椋瑮V辉试S在棧頂進(jìn)行元素的插入與刪除操作,所以需要一個(gè)指向棧頂?shù)淖兞縯op。那么棧的存儲(chǔ)結(jié)構(gòu):
typedef int SElemType; typedef struct{ SElemType data[MAXSIZE]; int top; }SqStack;
接著,就是插入一個(gè)新的元素e,也就是進(jìn)棧操作push。向棧頂插入一個(gè)元素,首先要判斷棧的存儲(chǔ)空間是否充足,如果以已經(jīng)沒(méi)有存儲(chǔ)空間了,則入棧失敗。代碼如下:
Status Push ( SqStack *S, SElemType e ) { if ( S->top == MAXSIZE - 1 ) return ERROR; S->top++; S->data[S->top] = e; }
如果要?jiǎng)h除一個(gè)操作,首先要判斷棧是否為空,如果不為空,則刪除有效,若為空,則刪除失敗。接著,只要top--就行了。代碼如下:
Status Pop ( SqStack *S, SElemType *e ) { if ( S->top == -1 ) return ERROR; *e = S->data[S->top]; S->top--; return OK; }
因?yàn)闆](méi)有涉及到循環(huán),所以,時(shí)間復(fù)雜度均為O(1)。