(1)題目:c語言中算術表示式中的括號只有小括號。編寫演算法,判斷表示式中的括號是否正確匹配,表示式已經存在字元陣列exp中(元素從陣列小標1開始儲存),字元個數為n。
分析:即在解決問題的過程中,出現了乙個狀態,但是憑現有條件不能判斷當前的狀態是否可以解決,需要記下,等待以後出現可以解決當前狀態的條件後返回來再解決。使用棧來解決,棧具有記憶功能,這是棧filo的延伸。
**:
int match(char exp, int n)
if (')' == exp[i])
else
}} if ( -1 == top ) //棧空,說明括號是匹配的
else //否則括號不匹配
}
(2)題目:用不帶頭結點的單鏈表儲存鏈棧,設計初始化、判斷空棧,進棧和出棧等演算法
分析:不帶頭結點的單鏈表lst為空的條件為 lst == null,進出棧都是在表頭進行的。
//初始化鏈棧
void initstackl(lnode *&lst)
//判斷棧空
int isemptyl(lnode *lst)
else }
//進棧
void pushl(lnode *&lst, int x)
//出棧
int pop(lnode *&lst, int &x) //需要改變的變數要用引用型
//刪除結點操作
p = lst; //p指向第乙個資料結點
x = p->data;
lst = p->next;
free(p);
return 1;
}
演算法設計學習 單鏈表演算法
1 題目 單鏈表a 和 b 帶表頭結點 元素遞增有序。設計演算法將a 和 b歸併成乙個按照元素值依然遞增有序的鍊錶c,c由a和b的結點組成。typedef struct lnode lnode void mergelinkedlist lnode a,lnode b,lnode c 要改變的變數使用...
演算法設計周記(十) 棧
給定乙個擁有固定格式的字串n s 將其解析成ss s 重複n次 的形式。這題涉及到符號匹配,可以考慮使用棧這一filo的資料結構來幫助解決問題。因為數字必定表示倍數,不會是轉換後的字串的內容,所以遍歷字串遇到數字時,將其轉換成整數形式存在int棧內 若是讀到字母,將其存入快取字串 符號意味著重複字串...
初級演算法之設計問題 最小棧
設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...