数据结构~~~线性表复习(栈的应用)

Posted disyushen666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构~~~线性表复习(栈的应用)相关的知识,希望对你有一定的参考价值。

// 线性表(栈的应用).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] = ‘‘;//便于输出最后的结果
}
int main()
{
    char ch[100];
    cin >> ch;
     edlin(ch);
    cout << ch<< endl;
    return 0;
}*/
   

//栈的应用···4迷宫求解

 

以上是关于数据结构~~~线性表复习(栈的应用)的主要内容,如果未能解决你的问题,请参考以下文章

栈的顺序存储结构及应用(CJava代码)

数据结构复习笔记————栈的常用接口实现(c语言)

数据结构与算法目录

C/C++数据结构-完整代码受限线性表:栈(栈的顺序存储,栈的链式存储,就近匹配,中缀表达式和后缀表达式)

常用数据结构

栈及栈的应用——后缀表达式