数据结构与算法-----堆栈篇

堆栈

1.基本特征:后进先出

2.基本操作:压入(push),弹出(pop)

3.实现要点:初始化空间、栈顶指针、判空判满

实践:使用C++语言实现堆栈类,进行示例演示并且根据此堆栈类实现进制的转换。

#include <iostream>
using namespace std;
class Stack {
public:
    // 构造函数中分配内存空间
    Stack (size_t size = 10) :
        m_data (new int[size]), m_size (size),
        m_top (0) {}
    // 析构函数中释放内存空间
    ~Stack (void) {
        if (m_data) {
            delete[] m_data;
            m_data = NULL;
        }
    }
    // 压入
    void push (int data) {
        if (full ())
            throw OverFlow ();
        m_data[m_top++] = data;
    }
    // 弹出
    int pop (void) {
        if (empty ())
            throw UnderFlow ();
        return m_data[--m_top];
    }
    // 判空
    bool empty (void) {
        return ! m_top;
    }
    // 判满
    bool full (void) {
        return m_top >= m_size;
    }
private:
    // 上溢异常
    class OverFlow : public exception {
    public:
        const char* what (void) const throw () {
            return "堆栈上溢!";
        }
    };
    // 下溢异常
    class UnderFlow : public exception {
    public:
        const char* what (void) const throw () {
            return "堆栈下溢!";
        }
    };
    int*   m_data; // 数组
    size_t m_size; // 容量
    size_t m_top;  // 栈顶
};
void printb (unsigned int numb, int base) {
    Stack stack (100);
    do {
        stack.push (numb % base);
    }   while (numb /= base);
    while (! stack.empty ()) {
        int digit = stack.pop ();
        if (digit < 10)
            cout << digit;
        else
            cout << char (‘A‘ + (digit - 10));
    }
    cout << endl;
}
int main (void) {
    try {
        Stack stack(20);
        for (int i = 0; ! stack.full (); i++)
            stack.push (i);
        while (! stack.empty ())
            cout << stack.pop () << "  ";
        cout << endl;
        cout << "整数:" << flush;
        int numb;
        cin >> numb;
        cout << "进制:" << flush;
        int base;
        cin >> base;
        cout << "结果:";
        printb (numb, base);
    }
    catch (exception& ex) {
        cout << ex.what () << endl;
        return -1;
    }
    return 0;
}

输出结果:

时间: 2024-11-09 00:13:07

数据结构与算法-----堆栈篇的相关文章

数据结构与算法-----队列篇

队列 1.基本特征:先进先出 2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop) 3.实现要点:初始化空间.从后端指针压入,从前端指针弹出, 循环使用,判空判满 实践1 :使用C++语言实现队列类并进行数据示例演示 #include <iostream> using namespace std; class Queue { public: // 构造函数中分配内存空间 Queue (size_t size) : m_data (new int[size]),

数据结构与算法-----总结篇

一.数据结构 程序设计=数据结构+算法 1.逻辑结构 1)集合:元素之间没有联系. 2)线性结构:元素之间存在前后顺序. 3)树形结构:元素之间存在一对多的父子关系. 4)图状结构:元素之间存在多对多的映射关系. 2.物理结构 1)顺序结构:用连续的空间存放数据元素. 优点:便于随机访问. 缺点:空间利用率低,插入删除不方便. 2)链式结构:用不连续的空间存放数据元素,每个数据元素中处理存放数据意外,还要存放下一个元素的地址. 优点:空间利用率高,插入删除方便. 缺点:随机访问不方便. 3.逻辑

数据结构与算法-----链表篇

链表 1.基本特征:由一系列内存中不连续的节点组成,每个节点除了保存数据以外,还需要保存其前后节点的地址--双向链表. 2.基本操作 1)追加 2)插入 3)删除 4)遍历 5)伪随机访问 示例:使用C++实现双向链表类,并演示结果: #include <iostream> using namespace std; class List { public: // 构造函数中初始化为空链表 List (void) : m_head (NULL), m_tail (NULL) {} // 析构函数

数据结构与算法javascript描述笔记--数组篇

数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数.然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串.在内部被归类为数组.由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用. 使用数组: 1.创建数组 ① 使用 [] 操作符 ,var arr=[] ,该方法效率最高. ② 调用 Array 的构造函数创建数组,var myArr=new

翻阅《数据结构与算法javascript描述》--数组篇

导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数.然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串.在内部被归类为数组.由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用. 使用数组: 1.创建数组 使用 [] 操作符 ,var a

数据结构与算法问题 堆栈使用 2011年吉林大学计算机研究生机试真题

题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. 输入: 对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束).而后的 n 行,每行的第一个字符可能是'P'或者'O'或者'A':如果是'P',后面还会跟着一个整数,表示把这个数据压入堆栈:如果是'O',表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作:如果是'A',表示询问

数据结构和算法篇——散列表

之前讲过博主在某网买了一个数据结构与算法的课程.本篇散列表是其中的三节.散列表应该是 Java 程序员常用并且最先碰到的一个数据结构了吧?Java 的 HashMap 就是对散列表的实现.可以说散列表算是一个比较基础.比较好理解(抛开需要缜密设计的哈希函数不说).比较好用(查询时间复杂度O(1))的一种数据结构.本篇在此分享这三节的总结笔记. 1)散列表开篇介绍:https://www.cnblogs.com/christmad/p/11519055.html 2)如何打造一个工业级的散列表:h

数据结构与算法 基于c语言篇

学习数据结构与算法走向深蓝之路 第一章:数据结构与算法概念型 数据结构:数据之间的相互关系,即是数据的组织形式. 基本组成:{ 数据:信息的载体 数据元素:数据基本单位: } 其结构形式有四种: 1,集合结构  2,线性结构.   3,树形结构  4,图形结构 在计算机中的存储有量中形式: 顺序存储(数组形式)和非顺序存储(链式存储结构) 1.1抽象数据类型:指的是数据模型或者定义在数据模型上的一组操作 (D,R,P){ D是数据对象, R是D上的关系集 P是对D进行的操作} ListInser

《数据结构与算法》和《设计模式》之开门见山篇

老生常谈的话题,大家都知道程序是由数据和指令构成,数据结构和算法很重要,可是我就是没有时间去仔细琢磨这东东啊.借口!在国内浮躁的IT氛围之大环境影响下,确实要做到想大学时那样,从头到尾把数据结构的东西看个遍真的很难. 有人认为数据结构这东西平时根本就用不上,最多可能会用到诸如链表和一些排序算法而已,而这些东西随便在网上度娘一下就一大堆.你顺手“借鉴一下”,Copy下,调试了没问题.你大可以说你自己会了.而且你还是“站在巨人的肩上”.用小沈阳的话“有意思吗”,“没意思”.有人认为数据结构这东西太难