C 基礎之用棧計算逆波蘭式

2022-08-30 01:15:10 字數 3025 閱讀 6891

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...