資料結構之棧(二) 棧的操作

2021-08-14 17:35:03 字數 1839 閱讀 6451

//selemtype型別根據實際情況而定,這裡假設為int

typedef int selemtype;

typedef struct

sqstack;

//插入元素e為新的棧頂元素

bool push(sqstack *s, selemtype e)

//棧頂指標增加1

s->top++;

//將新插入元素賦值給棧頂空間

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

return true;

}

//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回true,否則返回false

bool pop(sqstack *s, selemtype *e)

棧的入棧和出棧的時間複雜度是o(1)。

陣列有倆個端點,倆個棧有倆個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處,另乙個棧為棧的末端,即下標為陣列長度n-1處。這樣,倆個棧如果增加元素,就是倆端點向中間延伸。

//倆棧共享空間結構

typedef struct sqdoublestack;

//插入元素e為新的棧頂元素

bool push(sqdoublestack *s, selemtype e, int stacknumber)

//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回true,否則返回false

bool pop(sqdoublestack *s, selemtype *e, int stacknumber)

//將棧1的棧頂元素出棧

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

} else if (stacknumber == 2)

//將棧2的棧頂元素出棧

*e = s->data[s->top2++];

} return true;

}

使用這樣的資料結構,通常都是針對倆個具有相同資料型別的棧的乙個設計上的技巧,且倆個棧的空間需求有相反關係時,也就是乙個棧增長時另乙個棧在縮短的情況。

棧的鏈式儲存結構,簡稱鏈棧。

#include//插入元素e為新的棧頂元素

bool push(linkstack *s, selemtype e)

//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回true,否則返回false

bool pop(linkstack *s, selemtype *e)

鏈棧的出棧和入棧操作的時間複雜度為o(1)。

如歌棧的使用過程中元素變化不可**,有時很小,有時非常大,那麼最好是用鏈棧,反之,如果它的變化在可控範圍內,建議使用順序棧會更好一些。

資料結構 棧之鏈棧

鏈棧 單鏈表的頭插和頭刪時間複雜度o 1 所以鏈式棧的棧頂在頭這邊 1 基於鍊錶 帶頭結點的單鏈表 實現棧先進後出的特徵 2 對於棧,必須同乙個方向入棧和出棧 3 對於鍊錶,有頭插 頭刪,尾插和尾刪 時間複雜度 o 1 不需要迴圈遍歷,比如判斷乙個數是否為10,if a 10 o n 需要迴圈遍歷,...

資料結構之棧的基本操作

棧的結構型別,和基本操作如下 typedef struct stack,st void initstack stack s 初始化棧 void destroystack stack s 銷毀棧 void push stack st,type e 插入元素 type pop stack st 彈出棧頂...

資料結構(二) 棧

棧也是一種線性儲存結構,具有先進後出的特點 word中的撤銷操作,作業系統的方法呼叫都利用了棧 棧還可以用來做匹配,比如括號匹配等 基於陣列的棧入棧push使用陣列的addlast 追加 取資料時使用陣列的getlast 做出棧pop 操作 這次模擬實現的棧是基於上篇部落格實現的動態陣列實現的 pu...