C++数据结构学习:栈和队列

2016-02-19 20:22 3 1 收藏

下面图老师小编跟大家分享一个简单易学的C++数据结构学习:栈和队列教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】

栈和队列是操作受限的线性表,似乎每本讲数据结构的数都是这么说的。有些书按照这个思路给出了定义和实现;但是很遗憾,这本书没有这样做,所以,原书中的做法是重复建设,这或许可以用不是一个人写的这样的理由来开脱。
  
   !-- frame contents -- !-- /frame contents --   顺序表示的栈和队列,必须预先分配空间,并且空间大小受限,使用起来限制比较多。而且,由于限定存取位置,顺序表示的随机存取的优点就没有了,所以,链式结构应该是首选。
  
    栈的定义和实现
    #ifndef Stack_H
    #define Stack_H
    #include "List.h"
    template class Stack : List//栈类定义
    {
    public:
    void Push(Type value)
    {
    Insert(value);
    }
    Type Pop()
    {
    Type p = *GetNext();
    RemoveAfter();
    return p;
    }
    Type GetTop()
    {
    return *GetNext();
    }
    List ::MakeEmpty;
    List ::IsEmpty;
    };
    #endif
   更多内容请看C/C++技术专题  数据结构  数据结构教程专题,或   队列的定义和实现
    #ifndef Queue_H
    #define Queue_H
    #include "List.h"
    template class Queue : List//队列定义
    {
    public:
    void EnQueue(const Type &value)
    {
   !-- frame contents -- !-- /frame contents --   LastInsert(value);
    }
    Type DeQueue()
    {
    Type p = *GetNext();
    RemoveAfter();
    IsEmpty();
    return p;
    }
    Type GetFront()
    {
    return *GetNext();
    }
    List ::MakeEmpty;
    List ::IsEmpty;
    };
    #endif
   更多内容请看C/C++技术专题  数据结构  数据结构教程专题,或   测试程序
    #ifndef StackTest_H
    #define StackTest_H
    #include "Stack.h"
    void StackTest_int()
    {
    cout < endl < "整型栈测试" < endl;
    cout < endl < "构造一个空栈" < endl;
    Stack a;
   !-- frame contents -- !-- /frame contents --   cout < "将1~20入栈,然后再出栈" < endl;
    for (int i = 1; i <= 20; i++) a.Push(i);
  
     while (!a.IsEmpty()) cout < a.Pop() < ' ';
    cout < endl;
    }
    #endif
    #ifndef QueueTest_H
    #define QueueTest_H
    #include "Queue.h"
    void QueueTest_int()
    {
    cout < endl < "整型队列测试" < endl;
    cout < endl < "构造一个空队列" < endl;
    Queue a;
    cout < "将1~20入队,然后再出队" < endl;
    for (int i = 1; i <= 20; i++) a.EnQueue(i);
    while (!a.IsEmpty()) cout < a.DeQueue() < ' ';
    cout < endl;
    }
    #endif
  
    没什么好说的,你可以清楚的看到,在单链表的基础上,栈和队列的实现是如此的简单,这也是我对于原书重复建设不满的最大原因。
  
   更多内容请看C/C++技术专题  数据结构  数据结构教程专题,或

来源:http://www.tulaoshi.com/n/20160219/1623481.html

延伸阅读
3. 把中缀表达式转换为后缀表达式的算法     设以’@’字符作为结束符的中缀算术表达式已经保存在s1字符串中,转换后得到的后缀算术表达式拟存于s2字符串中。由中缀表达式转换为后缀表达式的规则可知:转换前后,表达式中的数值项的次序不变,而运算符的次序发生了变化,由处在两个运算对象的中间变为处在两个运算对象的后面...
汉诺塔的非递归解法 似乎这个问题的最佳解法就是递归,假如你想用栈来消解掉递归达到形式上的消除递归,你还是在使用递归的思想,因此,他本质上还是一个递归的算法。我们这本黄皮书在谈论到“什么情况使用递归”的时候,在“3.问题的解法是递归的”这里面,就这样说了“有些问题只能用递归的方法来解决,一个典型的例子就是汉...
才刚开了个头,就要说再见了——在树这里,除了二叉树,别的都还没有讲。为什么可以总结了呢?因为前面已经涉及到了树的两个基本用途,而假如再讲B+、B-,就不能不提到搜索,假如是胜者树就不能不提到排序。为此,把这部分放到后面。 !-- frame contents -- !-- /frame contents -- 我前面所做的努力,只是让你有个基本概念,什么...
线索化二叉树 这是数据结构课程里第一个碰到的难点,不知道你是不是这样看,反正我当初是费了不少脑细胞——当然,恼人的矩阵压缩和相关的加法乘法运算不在考虑之列。 !-- frame contents -- !-- /frame contents -- 我费了不少脑细胞是因为思考:他们干什么呢?很欣喜的看到在这本黄皮书上,这章被打了*号,虽然我不...
递归遍历与非递归遍历 前面写过一些关于递归的文章,因为那时还没有写到树,因此也举不出更有说服力的例子,只是阐述了“递归是一种思想”,正像网友评价的,“一篇入门的文章”。但只要能能让你建立“递归是一种思想”这个观念,我的努力就没有白费。 !-- frame contents -- !-- /frame contents -- 现在,讲完了二叉...

经验教程

672

收藏

15
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部