print?#include
#include
#include
typedef struct mystack *stack;
struct mystack {
int capacity; /* 棧的容量 */
int top_of_stack; /* 棧頂下標 */
int *array; /* 存放棧中元素的陣列 */
/* 棧的建立 */
stack createstack(int max)
stack s;
s = malloc(sizeof(struct mystack));
if (s == null)
printf("create stack error!\n");
s->array = malloc(sizeof(char) * max);
if (s->array == null)
printf("create stack error!\n");
s->capacity = max;
s->top_of_stack = 0;
return s;
/* 釋放棧 */
void disposestack(stack s)
if (s != null)
free(s->array);
free(s);
/* 判斷乙個棧是否是空棧 */
int isempty(stack s)
return !s->top_of_stack;
/* 判斷乙個棧是否滿棧 */
int isfull(stack s)
if (s->top_of_stack == s->capacity - 1)
return 1;
else
return 0;
/* 資料入棧 */
int push(int x, stack s)
if (isfull(s))
printf("the stack is full!\n");
else
s->array[s->top_of_stack++] = x;
/* 資料出棧 */
int pop(stack s)
if (isempty(s))
printf("the stack is empty!\n");
else
s->top_of_stack--;
/* 將棧頂返回 */
int top(stack s)
if (!isempty(s))
return s->array[s->top_of_stack-1];
printf("the stack is empty!\n");
return 0;
int main()
int i, len, result;
char str[100];
printf("please input the postfix that you want to compute: \n");
scanf("%s", str);
len = strlen(str);
/* 根據序列的長度來建立棧 */
struct mystack *my_stack = createstack(len+1);
for (i = 0; i < len; i++)
if (str[i] >= '0' && str[i] <= '9')
push((int)str[i]-48, my_stack);
else if (str[i] == '+')
int x = top(my_stack);
pop(my_stack);
int y =top(my_stack);
pop(my_stack);
push(x+y, my_stack);
//printf("%d\n", top(my_stack));
else if (str[i] == '-')
int x = top(my_stack);
pop(my_stack);
int y = top(my_stack);
pop(my_stack);
push(x-y, my_stack);
//printf("%d\n", top(my_stack));
else if (str[i] == '*')
int x = top(my_stack);
pop(my_stack);
int y = top(my_stack);
pop(my_stack);
push(x*y, my_stack);
//printf("%d\n", top(my_stack));
else if (str[i] == '/')
int x = top(my_stack);
pop(my_stack);
int y = top(my_stack);
pop(my_stack);
push(x/y, my_stack);
//printf("%d\n", top(my_stack));
printf("the result is: %d\n", top(my_stack));
pop(my_stack);
/* a bug */
// disposestack(my_stack);
return 0;
#include
#include
#include
typedef struct mystack *stack;
struct mystack {
int capacity; /* 棧的容量 */
int top_of_stack; /* 棧頂下標 */
int *array; /* 存放棧中元素的陣列 */
/* 棧的建立 */
stack createstack(int max)
逆波蘭式 棧實現
因為做二叉樹非遞迴的前後中遍歷,用到棧的方法。xpp說那就乾脆把四則運算,逆波蘭式 棧的實現做了。這是參考別人的程式寫的,注釋比較亂。而且這個是直接實現計算機計算的四則運算,沒有將逆波蘭的表示式列印出來。今天腰太酸了,明天改一改,把逆波蘭式列印出來噻333333.棧還有迷宮演算法是不是?現在腦子裡之...
C 實現逆波蘭式
a b c的逆波蘭式為ab c,假設計算機把ab c按從左到右的順序壓入棧中,並且按照遇到運算子就把棧頂兩個元素出棧,執行運算,得到的結果再入棧的原則來進行處理,那麼ab c的執行結果如下nkqnqmthw 1 a入棧 0位置 2 b入棧 1位置 3 遇到運算子 將a和b出棧,執行a b的操作,得到...
C語言棧實現逆波蘭計算器
逆波蘭計算器 輸入所要計算的表示式的逆波蘭式,並進行計算。如 1 2 4 5 其逆波蘭式 1 2 4 5 基礎的東西,還是要多敲 如下 中,輸入的格式如 1 2 4 5 include include include define stack init size 20 define stack in...