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

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

原文地址:https://www.cnblogs.com/Disyushen666/p/9457727.html

时间: 2024-10-19 04:30:41

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

[考研系列之数据结构]线性表之栈

?基本概念 栈的定义 限定仅在表尾进行插入或删除的线性表 组成 栈顶 栈底 基本操作 入栈(PUSH) 往栈中插入一个元素 弹栈(POP) 从栈顶删除一个元素 栈的表示 顺序栈 链栈 对于顺序栈,有两个指针base和top base指向栈底 top指向栈顶 对于栈的一些基本情况: 栈不存在时候 base=NULL 栈为空时  top=base 栈的长度 top-base 链栈略过. 栈的应用 1 数制转换 数制转换我们使用一种称之为"辗转相除法"的算法.此算法的基本原理基于: N=(N

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大

数据结构~~~线性表复习2(动态链表的合并)

// 线性表(链表).cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include"iostream" using namespace std; template<class T> struct Node { T data; Node *next; }; template<class T> class listNode { private: Node<T> *Head; public: l

Java数据结构-线性表之栈的应用-递归及其应用

??递归函数的定义:把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数(递归函数必须有一个结束的条件,以免陷入无穷尽的递归中). 迭代和递归的区别是: ?(1).迭代使用的是循环结构,递归使用的是选择结构. ?(2).递归能使程序的结构更清晰.更简洁.更容易让人理解,从而减少读懂代码的时间.但是大量的递归调用会建立函数的副本,会耗费大量的时间和内存. ?(3).迭代则不需要反复调用函数和占用额外的内存.因此我们应该视不同情况选择不同的代码实现方式. 下面解释一下怎么使用栈

数据结构回顾之顺序存储结构中的线性表(栈与队列顺序线性表实现)

说到数据结构呢,对于一个Coder来说还是蛮重要的啦,每次看数据结构的东西都有新的收获,这两天在回顾数据结构的知识.当然啦,虽然数据结构有些是理论的东西,如果好好的理解数据结构的东西还是少不了的代码的支撑的.数据结构简单的来说吧,可以分为两大类,一个是数据的"物理存储结构",另一种是数据的"逻辑存储结构".数据的"物理存储结构"又可分为顺序的和链式的(下面将会结合着代码打印内存地址的形式来观察物理存储结构). 逻辑存储结构又可分为集合,线性, 树

【Java】 大话数据结构(6) 线性表之栈

本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac

数据结构-线性表(2)

线性表定义: 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单,便于实现和操作.因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构. 存储空间是否连续: 一.顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配. 优点: (1)方法简单,各种高级语言中都有数组,容易实现. (2)不用为表示节点间的逻辑关系而增加额外的存储开

[考研系列之数据结构]线性表概述

1.脑图 2.表示方法 按照数据结构概述所说,线性表有两种表示方法分别是顺序表示和链式表示,链表就是链式表示的典型. 我们知道链式表示是分配了n块内存空间,可以认为彼此不连续,所以不能用偏移量去定位每个元素. 下面就先说最简单的单向链表: 如果每个数据元素能有一个指针指向下一个元素的话,那么只需要知道第一个数据元素就能一个一个的遍历整个链表了,这就是单向链表. 对于每个链表元素我们称之为节点,每个节点都有两个域:数据域&指针域 数据域就是数据元素所在的区域,而指针域则是存储指向另一个节点的指针的

&lt;2014 05 16&gt; 线性表、栈与队列——一个环形队列的C语言实现

栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外,还有一些扩展的数据结构,如双端队列.双栈.超队列.超栈等,它们是一种扩展与变异结构. 线性表有顺序存储和链接存储两类,这是针对计算机的线性存储空间作出的分类.前者可以是数组,后者可以是链表.字符串是线性表最常见的应用. 这里我用C语言实现了一个基于数组环形队列,它具有固定的队列空间.相比于链表实现,