資料結構與演算法分析3 1 棧實現表示式 運算

2021-08-18 21:27:15 字數 1620 閱讀 5592

用棧實現了表示式的運算,基本功能可以實現,enhance 給qa測試一下應該可以做個簡單的計算器。

root@ubuntu:data-struct# cat stack_cal.c 

#include #include #include typedef int element_t;

typedef struct stack_t, *stack_ptr;

stack_ptr new_stack(int cap)

}return p1;

}void destroy_stack(stack_ptr p)

}//p must not be empty,

element_t stack_get_top(stack_ptr p)

//只是為了能夠讓乙個stack成為輸入才(從0讀取,而不是pop)用到這個函式。

element_t stack_get_pos(stack_ptr p, int pos)

else

}      

element_t stack_pop(stack_ptr p)

else

}int stack_push(stack_ptr p, element_t e)

else

return 0;

}int stack_is_empty(stack_ptr p)

int stack_clean(stack_ptr p)

return 0;

}int stack_number(stack_ptr p)

int oper_map(char c) 

return 0;

}int  cmp_oper(char c1, char c2) 

int cal(int a1, int a2, char oper)

return -1;

}//輸入表示式,計算出值,如:4 + 5 * 1 *(8 - 6 / 2)- 3 = 26。暫不支援冪次方,和兩位數(獲取數不是本次考查重點)

int main()

//printf("pls input your expression:");

int exp_len = strlen(exp), i;

str_p = exp;

//將中間表示式轉換成字尾表示式:

for (i = 0; i < exp_len; i++)  

else if (oper_map(exp[i]))

else  

else

stack_push(p1, exp[i]);}}

}else if ( exp[i] == ')' )

stack_pop(p1);//pop (}}

stack_push(p2, stack_pop(p1));

int a1, a2, tmp;

exp_len = stack_number(p2);

stack_clean(p1);

for (i = 0; i <= p2->top; i++)

else

}printf("result:%d\n", stack_pop(p1));

}

root@ubuntu:data-struct# 

資料結構與演算法分析 棧與佇列

以下是對資料結構中的棧和佇列的一些總結 一 棧 棧 stack 是一種特殊的線性表,有後進先出 last in first out,lifo 的性質,且只能從線性表的一段進行插入和刪除元素等操作。棧的常用操作有 進棧 出棧 取棧頂 將棧置空 判斷棧是否為空 判斷棧是否已滿等等。由於棧也屬於線性表,因...

資料結構與演算法《棧》

概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...

棧(資料結構與演算法)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...