1. 程式人生 > >棧 程式碼詳解(初始化棧、清空棧、進棧、出棧、判斷棧為空為滿,將二進位制結果取出)

棧 程式碼詳解(初始化棧、清空棧、進棧、出棧、判斷棧為空為滿,將二進位制結果取出)

棧:是一種思想,實現將資料以先進後出(FILO:first in last out)方式操作

一、模型:井口

二、資料型別:
        //巨集:
        #define MAXSIZE  10
        //重新命名:將int取一個別名:StackType
        typedef int StackType;
        //棧的型別:
        struct stack
        {
        //資料:
                StackType buf[6];       //棧的元素
        //方法
                short top;              //棧頂下標
        };
  三、功能:
    1、初始化InitStack
    2、清空棧:ClearStack
    3、出棧:pop
    4、進棧:push
    5、判斷棧為滿:IsFull
    6、判斷棧為空:IsEmpty
    7、取次棧頂
    8、棧的元素個數:StackLength

四、棧的應用:撤消與恢復,記憶,遞迴,高階功能計算

棧的程式碼詳解、將二進位制結果取出,實現程式碼如下

#include<stdio.h>
//巨集
#define MAXSIZE 32
#define FALSE 0
#define TRUE 1
//重新命名:將char取一個別名:StackType
typedef char StackType;
typedef char BOOL;
//棧的型別;
struct st
{
//資料
	StackType buf[MAXSIZE];//棧的元素
//方法
	short top;//棧頂下標
};
//重新命名:
typedef struct st stack;//將struct stde 型別取別:stack

/*功能:初始化棧
 *函式名:InitStack
 *返回值:void
 */
void InitStack(stack *p)
{
	p->top=-1;
}

/*功能:判斷棧為滿
 *函式名:IsFull
 *返回值:為滿——真1,非滿——假0
 */
BOOL IsFull(stack *p)
{
	if(MAXSIZE-1==p->top)
	{
		return TRUE;
	}else
	{
		return FALSE;
	}
}

/*功能:判斷棧為空
 * 函式名:IsEmpty
 *返回值:為空——真1,非空——假0
 */
BOOL IsEmpty(stack *p)
{
	if(-1==p->top)
	{
		return TRUE;
	}else
	{
		return FALSE;
	}
}
/*功能:進棧
 *函式名:push
 *返回值:成功TRUN 失敗FALSE
 *注:不能為滿,否則進棧失敗
 */
BOOL push(stack *p,StackType data)//p=&s
{
//判斷棧是否為滿
	if(TRUE==IsFull(p))//為滿
	{
		return FALSE;//返回失敗
	}
	p->buf[++p->top]=data;
	return TRUE;//返回成功
}
/*功能:出棧
 *函式名:pop
 *返回值:出棧成功TRUE 失敗FALSE
 */
BOOL pop(stack *p,StackType *pd)
{
//判斷是否為空,為空出棧無意義
	if(TRUE==IsEmpty(p))
	{
		return FALSE;//出棧失敗
	}
	*pd=p->buf[p->top--];//優先順序->大於--
	return TRUE;//出棧成功
}
void main()
{
//定義變數:型別 變數名
//struct st s;
	struct st s;//分配空間
	//初始化
	InitStack(&s);
	int num=0;
	printf("請輸入");
	scanf("%d",&num);
	//求二進位制
	while(num!=0)
	{
	//將餘數入棧
		if(FALSE==push(&s,num%2))
		{
			return;//結束
		}
		num/=2;
	}
	//將二進位制結果取出來
	char value=0;
	while(FALSE!=pop(&s,&value))
	{
		printf("%d",value);
	}
	printf("\n");
}