第二章 栈和队列(1)——顺序存储
1、棧(Stack):是一種特殊的線性表(數(shù)據(jù)元素之間的關(guān)系是線性關(guān)系),其插入、刪除只能在表的一端進(jìn)行,另一端固定不動(dòng)。
2、術(shù)語(yǔ):
棧頂(top):插入、刪除的一端;
棧底(bottom):固定不動(dòng)的一端;
入棧(push):又稱壓入,即插入一個(gè)元素;
出棧(pop):又稱彈出,即刪除一個(gè)元素;
3、棧的操作
1)棧初始化Inistack(s):將棧置為空;
2)入棧Push(s):即在棧頂插入一個(gè)元素;
3)出棧Pop(s):即在棧頂刪除一個(gè)元素;
4)取棧頂元素Get_top(s):訪問(wèn)棧頂元素;
5)判斷棧是否空Empty(s):判斷是否為空;
6)求棧的大小Current_size(s):求棧中元素個(gè)數(shù);
7)棧清空Clear(s):將棧清為空;
4、棧的ADT描述
ADT Stack{data structure:D={ai|ai∈D0 i=1,2,... n>=0}R={N}N={<ai-1,ai>|ai-1,ai∈D0 i=2,3,4,...}D0是某個(gè)對(duì)象operations:Initiate(S);Push(S);Pop(S);Get_top(S);Empty(S);Current_size(S);Clear(S); }ADT Stack?
5、存儲(chǔ)方式:同一般線性表的順序存儲(chǔ)結(jié)構(gòu)完全相同。但是棧底可以在地址低端,也可以在地址高端。
棧的順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn):簡(jiǎn)單,方便,但易產(chǎn)生溢出。
上溢(overflow):棧已經(jīng)滿,又要壓入元素;
下溢(Underflow):棧已經(jīng)空,還要彈出元素;
注:上溢是一種錯(cuò)誤,使問(wèn)題的處理無(wú)法進(jìn)行下去;而下溢一般認(rèn)為是一種結(jié)束條件,即問(wèn)題處理結(jié)束。
6、慮擬實(shí)現(xiàn):
#define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef struct {SElemType *base; //在棧構(gòu)造之前和銷毀之后,base=NULLSElemType *top;//棧頂指針int stacksize; }SqStack;?
7、操作
1)棧初始化
Status InitStack(SqStack &S) {S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK; }?
2)入棧??? //在棧頂插入新元素,要考慮上溢的處理
Status Push(SqStack &S, SElemType e) {if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW)S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;reutrn OK; }?
3)出棧//若棧不空,則刪除S的棧頂元素,用e返回其值
Status Pop(SqStack &S, SElemType &e) {if(S.top==S.base) return ERROR;e=*--S.top;return OK; }?
4)判斷棧是否空
Status StackEmpty(SqStack S) {if(S.top=S.base)return TRUE;else return FALSE; }?
5)取棧頂元素
Status GetTop(SqStack S, SElemType &e) {//若棧不空,用e返回棧頂元素if(S.top==S.base) return ERROR;e=*(S.top-1);return OK; } posted on 2014-04-13 16:24 ii沙漠 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/shamoof/p/3662386.html
總結(jié)
以上是生活随笔為你收集整理的第二章 栈和队列(1)——顺序存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 马云演讲稿
- 下一篇: VB中判断空的几种方法,Null, Mi