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