棧的簡單應用

2021-08-14 19:01:20 字數 1616 閱讀 4127

一、棧的簡單應用

1、數制轉換。

2、括號匹配。

3、逆波蘭表示式的計算。

二、**

void hextran(datatype x,datatype k)  //任意進製轉換

while (stackempty(&s))

}datatype bracketsmatch(char *p) //括號匹配

if (*p==')')

stackpop(&s); //反括號且棧不為空則匹配

}p++;

}if (0 == stackempty(&s)) //棧為空則匹配

return

0; //不匹配

}int rpnexpression(cell *rpn,size_t n) //逆波蘭表示式

else

//遇到計算符號就取出棧頂值計算

i++;}}

return stacktop(&s);

}

三、整體**和測試結果:
typedef

enum rpn_type //字尾表示式的狀態

rpn_type;

typedef

struct cell //結構

cell;

void hextran(datatype x,datatype k); //任意進製轉換

datatype bracketsmatch(char *p); //括號匹配

int rpnexpression(cell *rpn,size_t n); //逆波蘭表示式

void hextran(datatype x,datatype k)  //任意進製轉換

while (stackempty(&s))

}datatype bracketsmatch(char *p) //括號匹配

if (*p==')')

stackpop(&s); //反括號且棧不為空則匹配

}p++;

}if (0 == stackempty(&s)) //棧為空則匹配

return

0; //不匹配

}int rpnexpression(cell *rpn,size_t n) //逆波蘭表示式

else

//遇到計算符號就取出棧頂值計算

i++;}}

return stacktop(&s);

}

3、test.c

void test5()

, ,,,

,,,,

,,,};

printf("%d \n",rpnexpression(rpn,sizeof(rpn)/sizeof(cell))); //逆波蘭表示式

}

應用中涉及到棧的操作請看此文章

四、執行結果

棧的簡單應用

十進位制數n到banse進製的轉換 遞迴版 void convert stack s,int64 t n,int base if 0 在尚有餘數之前,不斷 s.push digit n base convert s,n base base 通過遞迴得到最有最高位 迭代版 void convert2 ...

棧及其簡單應用

棧是一種特殊的線性表 是一種先進後出表 filo 只有棧頂元素才能被操作 特殊 棧具有特殊的儲存訪問結構 棧的操作 入棧 向棧中儲存資料元素 push 出棧 從棧中取出元素 pop 棧頂指標 top 用來指向最後乙個入棧元素 棧滿 上溢 不可入棧 top size 1 入棧操作 top top 1 ...

poj2082棧的簡單應用

poj2082 題目描述的真複雜 其實題意很簡單 就是輸入每個長方形的寬度和高度 可以切割的最大的長方形的面積 解題思路就是維護乙個高度遞增的乙個棧,輸入的高度大於等於棧頂元素的高度就將其壓入棧中 輸入的高度小於棧頂元素的高度就將其出棧 直到棧空或者棧頂元素的高度小於輸入元素的高度 在棧頂元素出棧的...