`
追梦--
  • 浏览: 37055 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数据结构——堆栈

阅读更多
    对于栈,想必大家都十分熟悉了,也能很快的答出栈是一个先进后出的队列。但是在平常编程的生活中应用的十分少。在ACM中,栈是一种十分重要的数据结构(其他领域也一样),我们可以用这种数据结构解决一些十分棘手的问题,大大提高了程序的效率。
有这样一道名为Software BUGs 的题。题目的意思简要来说就是去除一篇文章中的所有 ”BUG” 字段。
   有些人可能认为这是一道水题,直接扫描文章,将其中的 ”BUG” 去掉就行。这样很容易就落进了陷阱。例如对于一个字符串 “ BBUBUGGG” 直接扫描过去得到 “BBUGGG” ,我们发现字符串中还有 ”BUG”(解决了一个BUG,又出现了一个BUG),他们马上又提出解决方法,我们可以将字符串扫描两遍,但是一样的会有BUG出现.......那我们扫描到不在出现BUG为止,这的确不失为一个方法,但是经过计算后我们发现这个算法的时间复杂度是O(n^2)。在数剧比较大的情况下,这是不可能在规定时间里出结果的!!!
   若我们采用堆栈这种数据结构。算法原理如下:若栈中元素小于两个或压入的字符不为’ G’,则将字符压入栈中,否则判断栈顶的两个元素是否为’B’和’U’,若不是则将’G’压入栈中,否则将栈顶的两个元素弹出。
   这样似乎没有什么区别,让我们举个例子看看,对于字符串 “BBUBUGG”,下面模拟栈中的情况。
   栈                      即将要压入的元素
                                B
   B                       B
   B B                     U
   B B U                   B
   B B U B                 U
   B B U B U               G   //符合条件,栈顶的两个元素将被弹出
   B B U                   G   //符合条件,栈顶的两个元素将被弹出
   B                       G
   B G
   所以最后的答案就是BG,不管嵌套多少层,这个数据结构都能以O(n)的时间复杂度计算出答案,下面贴出c++代码

#include<iostream>
#include<stack>
using namespace std;
int main(){
    char s[1000],stk[1000];
    cin >> s;
    while(s!="0"){
        int top = -1;
        for(int i=0;s[i]!='\0';i++){
           if(top<1||s[i]!='G'){
              top++;
              stk[top]=s[i];                     
           }else if(stk[top-1]=='B'&&stk[top]=='U'){
              top-=2;                                 
           }else{
              top++;
              stk[top]=s[i]; 
           }   
        }
        for(int i=0;i<=top;i++)
           cout << stk[i];
        cout << endl;
        cin >> s;
    }
    return 0;    
}



   同样的,我们可以利用这个数据结构做表达式求值,布尔表达式求值。POJ2106-Boolean Expressions就是这个类型的题目。
0
1
分享到:
评论

相关推荐

    数据结构——堆栈和队列

    该文件包括堆栈的头文件(Seq开头)和链表的头文件(Lin开头),另外还实现了十进制转化为八进制、对称串判断和带头结点的单循环链表实现链式队列

    全国青少年信息学奥林匹克联赛数据结构——堆栈和队列

    全国青少年信息学奥林匹克联赛需要掌握的数据结构知识:堆栈和队列部分的详细讲义。是参加noip不可多得的学习资料哈。

    数据结构与算法——堆栈实现括号匹配

    数据结构实验括号匹配,本例子是堆栈实现括号匹配的

    数据结构——二叉树

    该文件包括二叉树的头文件(BitTree开头)和堆栈的头文件(Seq开头),另外还实现了编写按层次顺序(同一层自左至右)遍历二叉树的算法、后序递归遍历计算二叉树的深度的算法、判断给定二叉树是否为完全二叉树(通过...

    数据结构——算术表达式求值

    算术表达式求值(用到堆栈,没用模版) 程序运用运算符栈、运算数栈以及优先级阵列等算法实现:对输入的算术表达式求值后输出。主程序结构简单,算法各函数功能明确。考虑到程序模版操作给程序可读性带来障碍,所以...

    DataStructureJava:主要数据结构——java中的简单实现

    数据结构Java 主要数据结构——java中的简单实现如何使用集合:-&gt; JDK(Java集合)-&gt; Guava(谷歌)-&gt; Commons-collections(Apache) 主要抽象数据结构——ADS列表(ArrayList、LinkedList、Vector)栈(FIFO)队列...

    院校数据结构课程——“栈”微课教学设计.pdf

    #资源达人分享计划#

    计算机科学与工程领域——数据结构与算法的专著 C/C++数据结构算法

    本书在简要回顾了基本的C++程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一个...

    数据结构课本源代码

    朱站立.数据结构——使用C语言(第4版).北京:电子工业出版社.2010. 单链表的头文件、顺序表的头文件、顺序堆栈的头文件

    《C语言描述——数据结构算法与应用》高清版

    本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之...

    数据结构--数据结构的组织方法.pdf

    栈、队列、数组、链表、树、图、字典树(⾼效树形结构)、散列表(哈希表) Java常⽤数据结构(图解): 图⽚源⾃于: 1、栈和队列: 2、栈(stack):先进后出,删除与加⼊均在栈顶操作 栈也称为堆栈,是⼀种线性表...

    数据结构-表达式求值

    数据结构——表达式求值(堆栈) (参看:严蔚敏《数据结构与算法》) 限于二元运算符的表达式定义: 表达式::=(操作数)+(运算符)+(操作数) 操作数::=简单变量|表达式 简单变量::=标识符|无符号...

    数据结构算法——Visual C++ 6.0程序集PPT

    侯识忠 等编著 共10章 第一章 顺序存储结构的表、堆栈和队列 第二章链式存储结构的表,堆栈和队列 第三章 数组、串和广义表 第四章 递归 .....

    数据结构与算法:语言描述(中英文)

    第12章为读者介绍另一种经典数据结构——二叉树。二叉查找树作为二叉树的特殊类型将是本章的主要内容。其他二叉树类型在第15章进行介绍。 第13章向读者说明在集合中存储数据的方法。这种方法在数据结构只存储唯一...

    C++数据结构与算法(程序设计)

    C++数据结构与算法,本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾 了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及...

    《数据结构与算法分析》.txt

    ——加菲劳 《数据结构与算法分析》 ――课程内容体系主要内容 教学单元模块 具体教学内容 绪论 绪论部分是全书的预备知识,主要对ADL语言、数据结构与算法、算法分析基础、OOP、和C++做了简单介绍 基本数据结构 ...

    数据结构与算法应用

    本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之...

    数据结构算法与应用-cpp语言描述.rar

    本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾了基本的C++程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法...

    数据结构(C++描述)

    本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之...

    数据结构与算法(c++)版

    数据结构与算法(c++),里面有7个pdf文件 本书是关于计算机科学与工程领域的基础性研究科目之一——数据结构与算法的专著。 本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图...

Global site tag (gtag.js) - Google Analytics