用棧實現了表示式的運算,基本功能可以實現,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...