// 线性表(栈的应用).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迷宫求解

 

posted on 2018-08-10 22:02  Dis羽神  阅读(90)  评论(0编辑  收藏  举报