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

棧:是一種思想,實現將數據以先進後出(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");
}

 

点赞