棧是一種操作受限的線性表,LIFO。
棧:邏輯結(jié)構(gòu)
順序棧:使用順序存儲方式實現(xiàn)的棧
??諚l件:S.top == -1
棧滿條件:S.top == MaxSize-1
棧長:S.top+1
非空條件下,top始終指向棧尾元素。
#define MaxSize 50
//棧的順序存儲結(jié)構(gòu)
typedef struct{//數(shù)據(jù)用數(shù)組存放
int data[MaxSize];
//存儲數(shù)組最后一個元素的下標,代表棧頂指針
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--,存儲結(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即棧頂元素的下標
x = S.data[S.top];
return true;
}
測試:#include#include//使用malloc和free關(guān)鍵字需要引入這個庫
#define MaxSize 50
//棧的順序存儲結(jié)構(gòu)
typedef struct{//數(shù)據(jù)用數(shù)組存放
int data[MaxSize];
//存儲數(shù)組最后一個元素的下標,代表棧頂指針
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--,存儲結(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即棧頂元素的下標
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(){//聲明一個結(jié)構(gòu)體類型的順序棧元素
SqStack S;
//初始化
InitStack(S);
printf("當前棧是否為空:%d\n",StackEmpty(S));
//入棧
Push(S,3);
Push(S,2);
Push(S,4);
Push(S,6);
printf("當前棧是否為空:%d\n",StackEmpty(S));
//讀棧頂元素
int x = 0;
GetTop(S,x);
printf("當前棧頂元素:%d\n",x);
//出棧
Pop(S,x);
printf("出棧元素:%d\n",x);
GetTop(S,x);
printf("當前棧頂元素:%d\n",x);
//打印棧
Print(S);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧