#define?STACK_SIZE?100?//定義棧容量為100
仙桃網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),仙桃網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為仙桃近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的仙桃做網(wǎng)站的公司定做!
int?contents[STACK_SIZE];?//定義數(shù)組contents用作棧
int?top?=?0;?//定義并初始化棧頂指針為0
//函數(shù)作用:清空棧
void?make_empty(void)
{
top?=?0;?//直接將棧頂指針置0
}
//函數(shù)作用:判斷棧是否為空
bool?is_empty(void)
{
return?top?==?0;?//返回top是否等于0
}
//函數(shù)作用:判斷棧是否已滿(mǎn)
bool?is_full(void)
{
return?top?==?STACK_SIZE;?//返回top是否等于STACK_SIZE
}
//函數(shù)作用:向棧中壓入一個(gè)元素i
void?push(int?i)
{
if(is_full())?//如果棧已滿(mǎn)
stack_overflow();?//執(zhí)行棧上溢操作
else?//否則可以入棧
contents[top++]?=?i;?//向棧中壓入i,然后將棧頂指針+1
}
//函數(shù)作用:彈出棧頂元素并返回
int?pop(void)
{
if(is_empty())?//如果棧為空
stack_underflow();?//執(zhí)行棧下溢操作
else?//否則可以出棧
return?contents[--top];?//返回棧頂元素,然后將棧頂指針-1
}
因?yàn)槎褩J擎準(zhǔn)綏?,是否滿(mǎn)棧取決于堆存儲(chǔ)的大小。堆空間耗盡時(shí),可以狹義地理解為棧滿(mǎn)。
那么在編程時(shí),可以用一個(gè)變量保存棧元素的個(gè)數(shù)。棧是否滿(mǎn),取決于申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí)的返回值,如
Stack
*p
=
(Stack
*)malloc(sizeof(Stack));,若(p
==
NULL),則棧滿(mǎn)。
#define STACK_SIZE 100
#define PUSH_POP_SUCCESS 1
#define PUSH_POP_ERROR 0
struct _stackbuf {
int _collection[STACK_SIZE];
int _top;
};
typedef struct _stackbuf S_STACK;
typedef unsigned int u_int_f;
// 入棧
u_int_f push(S_STACK *stack, int d){
if (stack-_top = STACK_SIZE) return PUSH_POP_ERROR;
stack-_collection[stack-_top++] = d;
return PUSH_POP_SUCCESS;
}
// 出棧
u_int_f pop(S_STACK *stack, int *e){
if (!stack-_top) return PUSH_POP_ERROR;
*e=stack-_collection[--(stack-_top)];
return PUSH_POP_SUCCESS;
}
int main(){
S_STACK stack = { {0},0 };
push(stack, 1);
push(stack, 2);
push(stack, 3);
int gv = 0;
pop(stack, gv);
printf("%d\n", gv);
system("PAUSE");
return 0;
}
1、初始化棧
/*功能:初始化棧
*函數(shù)名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p-top=-1;
}
2、判斷棧為滿(mǎn)
/*功能:判斷棧為滿(mǎn)
*函數(shù)名:IsFull
*返回值:為滿(mǎn)——真1,非滿(mǎn)——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p-top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判斷棧為空
/*功能:判斷棧為空
* 函數(shù)名:IsEmpty
*返回值:為空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p-top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、進(jìn)棧
/*功能:進(jìn)棧
*函數(shù)名:push
*返回值:成功TRUN 失敗FALSE
*注:不能為滿(mǎn),否則進(jìn)棧失敗
*/
BOOL push(stack *p,StackType data)//p=s
{
//判斷棧是否為滿(mǎn)
if(TRUE==IsFull(p))//為滿(mǎn)
{
return FALSE;//返回失敗
}
p-buf[++p-top]=data;
return TRUE;//返回成功
}
5、出棧
/*功能:出棧
*函數(shù)名:pop
*返回值:出棧成功TRUE 失敗FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判斷是否為空,為空出棧無(wú)意義
if(TRUE==IsEmpty(p))
{
return FALSE;//出棧失敗
}
*pd=p-buf[p-top--];//優(yōu)先級(jí)-大于--
return TRUE;//出棧成功
}
擴(kuò)展資料:
主函數(shù):
void main()
{
//定義變量:類(lèi)型 變量名
//struct st s;
struct st s;//分配空間
//初始化
InitStack(s);
int num=0;
printf("請(qǐng)輸入");
scanf("%d",num);
//求二進(jìn)制
while(num!=0)
{
//將余數(shù)入棧
if(FALSE==push(s,num%2))
{
return;//結(jié)束
}
num/=2;
}
//將二進(jìn)制結(jié)果取出來(lái)
char value=0;
while(FALSE!=pop(s,value))
{
printf("%d",value);
}
printf("\n");
}