栈之顺序栈

来源:互联网 发布:软件开发人员职位 编辑:程序博客网 时间:2024/05/01 23:59

    数据结构草草学过,不过没有认真运用过。 虽然知道一些最为基本的抽象类型及一些常用操作,不过叫我把这些基本的算法写出来我也是写不出来的。因为常说数据结构+算法是一个程序员最基本的素质,所以这次认真加以复习。在复习的同时我尽量将自己学习的其他的一些基本知识比如C++中的面向对象思想也引入进来,同时也会将在复习中碰到其他的一些问题提出来,能解决的便解决,不能解决的可以试着解决。
    To be a programmer .


    栈是一种限定性的线性表,是将线性表的插入和删除运算限制为仅在表的一端进行,通常将表中允许进行插入、删除操作的一端称为栈顶


    同样地,栈在计算机中也有两种基本的存储结构:顺序存储结构和链式存储结构。通常称顺序存储的栈为顺序栈,链式存储的栈

为链栈。本文档只涉及顺序存储结构,顺序结构可用高级程序设计语言中的数组来模拟。
    文章的组织结构分为三部分:开头是简单的介绍,之后是数据结构基本运算的代码,最后是在复习中遇到的一些问题。 
    以下代码实现了一些线性表最基本的运算,有关代码的三点说明:
    1) 运用了C++中的类模版概念;
    2) 自己定义了有关栈的简单的异常层次结构。
    3) 因为栈就是一种特殊的线性表,这次代码没有像之前顺序表那样详细注释了每个函数的各种信息。
    实现代码分三个部分:stackexception.h定义针对栈的异常类,stack.h定义了模版类,main.cpp进行简单的测试,因为本节的重点是对异常类的捕获进行测试,所以一些诸如打印出栈的元素没有进行实现, 不过这些基本运算与线性表的类同。



    在平时写C++程序时我通常喜欢将类的定义放在头文件中,把类的实现放在文本文件中。但是,在使用模版的时候对此则有所注意,通常模版在编译之时有两种编译模式,一种为包含编译模式,在这种模式下,每个模版被实例化的文件中必须包含函数模版/类模版及其成员的定义。另一种方式为分离编译模式,这种模式下函数模版/类模版能够像普通函数/普通类那样进行组织,即将声明与实现相分离。
    上面的代码采用的是包含模式,我将类模版的定义及其成员实现均放在头文件stack.h中。