棧 程式碼詳解(初始化棧、清空棧、進棧、出棧、判斷棧為空為滿,將二進位制結果取出)
阿新 • • 發佈:2019-01-04
棧:是一種思想,實現將資料以先進後出(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"); }