// 线性表(栈的应用).cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include"iostream" #include"string" using namespace std; template <class T> class Stack { private: int top; T * S; int size; public: Stack(); Stack(int x); void push(T x); bool isempty(); bool isfull(); T gettop(); T pop(); void clear(); }; template<class T> Stack<T>::Stack() { S = new T[100]; top = -1; size = 100; } template<class T> Stack<T>::Stack(int x) { S = new T[x]; top = -1; size = x; } template<class T> bool Stack<T>::isempty() { if (top == -1) { return true; } else return false; } template<class T> bool Stack<T>::isfull() { if (top == size - 1) { return true; } else return false; } template<class T> void Stack<T>::push(T x) { if (!isfull()) { top++; S[top] = x; } } template<class T> T Stack<T>::pop() { if (!isempty()) { return S[top--]; } } template<class T> T Stack<T>::gettop() { return S[top]; } template<class T> void Stack<T>::clear() { top = -1; } //栈的应用··1数制转换 /*template<class T>//T只能是数的类型 void conversion(T x, T flag) { Stack<T> s; while (x) { s.push(x%flag); x = x / flag; } while (!s.isempty()) { cout << s.pop(); } cout << endl; } int main()//用于测试数制转换的主程序 { int x, flag; cin >> x >> flag; conversion<int>(x, flag); return 0; }*/ //栈的应用··2括号匹配的检验 /*bool bracket( char * s ) { int length = strlen(s); int FLAG; Stack<char> ch; char flag[4] = { '(','[',')',']' }; for (int i = 0; i < length; i++) { FLAG = 0; for (int j = 0; j < 2; j++) { if (s[i] == flag[j]) { ch.push(s[i]); FLAG = 1; break; } } if (FLAG==0) { switch (s[i]) { case ']': if (ch.pop() != flag[1]) return false; break; case')': if (ch.pop() != flag[0]) return false; break; } } } return true; } int main() { char s[20]; cin >> s; if (bracket(s)) { cout << "括号检测完成,括号“无误”" << endl; } else { cout << "括号检测完成,括号“有误”" << endl; } return 0; }*/ //栈的应用··3行编辑程序 /*说明: 1:当用户发现刚刚键入的一个字符是错误的时,可以键入补进一个“#”,以表示前一个字符无效 2:如果发现错误太多且无法补救,则可以键入一个“@”,以表示在“@”之前的本行字符都无效 */ /*void edlin(char *ch) { int i = 0; Stack <char> s; while (ch[i]) { switch (ch[i]) { case '#':s.pop(); break; case'@':s.clear(); break; default: s.push(ch[i]); break; } i++; } char CH[100]; int j = 0; while (!s.isempty()) { CH[j]= s.pop(); j++; } j = j - 1; i = 0; while (j >= 0)//将字符串反转一下 { ch[i] = CH[j]; j--; i++; } ch[i] = '\0';//便于输出最后的结果 } int main() { char ch[100]; cin >> ch; edlin(ch); cout << ch<< endl; return 0; }*/ //栈的应用···4迷宫求解