//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...