第乙個問題:對於括號匹配,我們可以使用棧進行實現,利用好棧的定義:先進後出,後進先出。
因此,我們可以通過每次將每個字元"( , , ], 若存在,則判斷檢測的該字元相對應的那個字元是否為棧頂元素,若為棧頂元素,則將其推出,若不為棧頂元素,則繼續,直到最後,若棧空,則這一行字串是滿足括號匹配的,反之。
**如下:
在這裡插入**片
#include#include#include#define ok 1
#define error 0
#define true 1
#define false 0
#define overflow -2
#define stack_init_size 100 //儲存空間初始化分配量
#define stackincrement 10 //儲存空間分配增量
typedef char elemtype;
typedef int status;
typedef structsqstack;
status initstack(sqstack &s)
else
}status destroystack(sqstack &s)
status clearstack(sqstack &s)
status stackempty(sqstack s)//判斷棧是否為空
status stacklength(sqstack s)//返回棧的長度
status gettop(sqstack s,elemtype &e)
else
}status push(sqstack &s,elemtype e)
else
}status pop(sqstack &s,elemtype &e)
else
}int main()
sqstack;
status initstack(sqstack &s)
else
}status destroystack(sqstack &s)
status clearstack(sqstack &s)
status stackempty(sqstack s)//判斷棧是否為空
status stacklength(sqstack s)//返回棧的長度
status gettop(sqstack s,elemtype &e)
else
}status push(sqstack &s,elemtype e)
else
}status pop(sqstack &s,elemtype &e)
else
}void lineedit(sqstack s,char *str)
pop(s,str[i]);
break;
case '@':
clearstack(s); //清空為空棧
break;
default:
push(s,str[i]); //進棧
break;
}i++;
} //輸出資料區中資料
temp=s.base;
while(temp!=s.top)
printf("\n");
clearstack(s); //清空棧中的即資料區的資料
}int main()
return 0;
}
資料結構之 棧的應用
前面幾篇寫的都是資料結構原理性內容,也在寫棧的時候提到了棧的應用場景很欠缺,所以這兩天把棧的幾個應用寫一寫,貼出來以後查閱方便。棧的幾個典型應用例子包括 1 漢諾塔問題 2 括號匹配問題 3 迷宮老鼠問題 4 電路防交叉的佈線問題 接近括號匹配 5 就是這個部落格貼出來的車廂重排問題 其實是乙個排序...
11 資料結構 使用遞迴實現棧的應用舉例
用遞迴函式求解迷宮問題 define maxlength 25 設迷宮的最大行列為25 typedef int mazetype maxlength maxlength 迷宮陣列型別 行 列 struct postype 迷宮座標位置型別 mazetype m 迷宮陣列 postype begin1...
資料結構 棧應用
一 算術表示式的中綴表示 把運算子放在參與運算的兩個運算元中間的算術表示式稱為中綴表示式。例如 2 3 4 6 9 算術表示式中包含了算術運算子和算術量 常量 變數 函式 而運算子之間又存在著優先順序,不能簡單地進行從左到右運算,編譯程式在求值時,不能簡單從左到右運算,必須先算運算級別高的,再算運算...