棧是一種操作受限的線性表,LIFO。
棧:邏輯結(jié)構(gòu)
順序棧:使用順序存儲(chǔ)方式實(shí)現(xiàn)的棧
??諚l件:S.top == -1
棧滿條件:S.top == MaxSize-1
棧長(zhǎng):S.top+1
非空條件下,top始終指向棧尾元素。
#define MaxSize 50
//棧的順序存儲(chǔ)結(jié)構(gòu)
typedef struct{//數(shù)據(jù)用數(shù)組存放
int data[MaxSize];
//存儲(chǔ)數(shù)組最后一個(gè)元素的下標(biāo),代表?xiàng)m斨羔?
int top;
} SqStack;
初始化順序棧://初始化順序棧,將棧頂指針置為-1
void InitStack(SqStack &S){S.top = -1;
}
判???://判棧空
bool StackEmpty(SqStack S){if(S.top == -1){return true;
}
return false;
}
入棧://入棧
bool Push(SqStack &S,int x){//判斷棧滿,S.top范圍:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先top+1,然后入棧
S.data[++S.top] = x;
return true;
}
出棧://出棧,只是邏輯結(jié)構(gòu)上的出棧,top--,存儲(chǔ)結(jié)構(gòu)上看出棧的元素還在內(nèi)存中
bool Pop(SqStack &S,int &x){//判斷棧滿,S.top范圍:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先出棧,然后top-1
S.data[S.top--];
return true;
}
讀棧頂元素://讀棧頂元素
bool GetTop(SqStack S,int &x){//判???
if(S.top == -1){return false;
}
//top即棧頂元素的下標(biāo)
x = S.data[S.top];
return true;
}
測(cè)試:#include#include//使用malloc和free關(guān)鍵字需要引入這個(gè)庫(kù)
#define MaxSize 50
//棧的順序存儲(chǔ)結(jié)構(gòu)
typedef struct{//數(shù)據(jù)用數(shù)組存放
int data[MaxSize];
//存儲(chǔ)數(shù)組最后一個(gè)元素的下標(biāo),代表?xiàng)m斨羔?
int top;
} SqStack;
//初始化順序棧,將棧頂指針置為-1
void InitStack(SqStack &S){S.top = -1;
}
//判???
bool StackEmpty(SqStack S){if(S.top == -1){return true;
}
return false;
}
//入棧
bool Push(SqStack &S,int x){//判斷棧滿,S.top范圍:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先top+1,然后入棧
S.data[++S.top] = x;
return true;
}
//出棧,只是邏輯結(jié)構(gòu)上的出棧,top--,存儲(chǔ)結(jié)構(gòu)上看出棧的元素還在內(nèi)存中
bool Pop(SqStack &S,int &x){//判斷棧滿,S.top范圍:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先出棧,然后top-1
S.data[S.top--];
return true;
}
//讀棧頂元素
bool GetTop(SqStack S,int &x){//判???
if(S.top == -1){return false;
}
//top即棧頂元素的下標(biāo)
x = S.data[S.top];
return true;
}
//打印棧
void Print(SqStack S){printf("棧內(nèi)元素:");
for(int i=0;i<=S.top;i++){printf("%d ",S.data[i]);
}
printf("棧頂指針:%d\n",S.top);
}
int main(){//聲明一個(gè)結(jié)構(gòu)體類型的順序棧元素
SqStack S;
//初始化
InitStack(S);
printf("當(dāng)前棧是否為空:%d\n",StackEmpty(S));
//入棧
Push(S,3);
Push(S,2);
Push(S,4);
Push(S,6);
printf("當(dāng)前棧是否為空:%d\n",StackEmpty(S));
//讀棧頂元素
int x = 0;
GetTop(S,x);
printf("當(dāng)前棧頂元素:%d\n",x);
//出棧
Pop(S,x);
printf("出棧元素:%d\n",x);
GetTop(S,x);
printf("當(dāng)前棧頂元素:%d\n",x);
//打印棧
Print(S);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:C語(yǔ)言棧實(shí)現(xiàn):順序棧-創(chuàng)新互聯(lián)
路徑分享:http://m.rwnh.cn/article14/espge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、全網(wǎng)營(yíng)銷推廣、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容