C++数据结构深入探究栈与队列

C++数据结构深入探究栈与队列

简介

栈和队列是常见的数据结构,尤其在程序设计和算法中都是不可或缺的。本文将深入讲解C++中栈和队列的实现原理和基本操作,并提供两个示例说明其应用。

栈(Stack)基本操作

栈的定义

栈是一种线性数据结构,具有后进先出(Last In First Out, LIFO)的特点。栈可以用数组或链表实现。

栈的操作

  • push() 在栈顶插入元素
  • pop() 弹出栈顶元素
  • top() 返回栈顶元素
  • empty() 判断栈是否为空
  • size() 返回栈中元素个数

栈示例

#include <iostream>
#include <stack>

using namespace std;

int main() {
    stack<int> s;
    s.push(1); // 在栈顶插入元素1
    s.push(2); // 在栈顶插入元素2
    s.push(3); // 在栈顶插入元素3

    cout << s.top() << endl; // 输出栈顶元素3
    s.pop(); // 弹出栈顶元素3

    cout << s.top() << endl; // 输出栈顶元素2

    return 0;
}

队列(Queue)基本操作

队列的定义

队列是一种线性数据结构,具有先进先出(First In First Out, FIFO)的特点。队列可以用数组或链表实现。

队列的操作

  • push() 在队列尾部插入元素
  • pop() 弹出队列头部元素
  • front() 返回队列头部元素
  • back() 返回队列尾部元素
  • empty() 判断队列是否为空
  • size() 返回队列中元素个数

队列示例

#include <iostream>
#include <queue>

using namespace std;

int main() {
    queue<int> q;
    q.push(1); // 在队列尾部插入元素1
    q.push(2); // 在队列尾部插入元素2
    q.push(3); // 在队列尾部插入元素3

    cout << q.front() << endl; // 输出队列头部元素1
    q.pop(); // 弹出队列头部元素1

    cout << q.front() << endl; // 输出队列头部元素2

    return 0;
}

示例一:栈的应用

下面是一个计算后缀表达式的示例程序。后缀表达式是指运算符在后面的数学表达式,例如3 4 +表示3+4。

该程序使用栈来实现后缀表达式的计算,首先将后缀表达式转换成栈,然后依次取出并计算其中的元素,最终得到结果。

#include <iostream>
#include <stack>
#include <cstring>

using namespace std;

double evaluatePostfix(char* postfix) {
    stack<double> s;
    double result = 0;

    for(int i = 0; i < strlen(postfix); i++) {
        if(postfix[i] >= '0' && postfix[i] <= '9') {
            s.push(postfix[i] - '0');
        }
        else {
            double operand2 = s.top();
            s.pop();
            double operand1 = s.top();
            s.pop();

            switch(postfix[i]) {
                case '+':
                    result = operand1 + operand2;
                    break;

                case '-':
                    result = operand1 - operand2;
                    break;

                case '*':
                    result = operand1 * operand2;
                    break;

                case '/':
                    result = operand1 / operand2;
                    break;
            }

            s.push(result);
        }
    }

    return result;
}

int main() {
    char postfix[] = {'3', '4', '+', '5', '*'};
    cout << evaluatePostfix(postfix) << endl; // 输出27

    return 0;
}

示例二:队列的应用

下面是一个实现循环队列的示例程序。循环队列是指先进先出(FIFO)的数据结构,在头尾相连的环形数组中存储数据。

该程序使用数组实现循环队列,并演示了入队和出队操作的基本方法。

#include <iostream>
#include <queue>

using namespace std;

const int QUEUE_SIZE = 10;

void enqueue(int queue[], int& rear, int value) {
    if((rear + 1) % QUEUE_SIZE == 0) {
        cout << "队列已满" << endl;
    }
    else {
        rear = (rear + 1) % QUEUE_SIZE;
        queue[rear] = value;
    }
}

void dequeue(int queue[], int& front) {
    if(front == -1) {
        cout << "队列为空" << endl;
    }
    else {
        front = (front + 1) % QUEUE_SIZE;
    }
}

int main() {
    int queue[QUEUE_SIZE];
    int front = -1;
    int rear = -1;

    enqueue(queue, rear, 1);
    enqueue(queue, rear, 2);
    enqueue(queue, rear, 3);
    dequeue(queue, front);
    dequeue(queue, front);

    cout << queue[front] << endl; // 输出队列头部元素3

    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++数据结构深入探究栈与队列 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • MySQL索引背后的数据结构及算法原理详解

    《MySQL索引背后的数据结构及算法原理详解》是一篇介绍MySQL索引背后的数据结构和算法原理的文章。MySQL索引是提高查询效率的一个重要工具,理解其背后的数据结构和算法原理对于提高数据库性能和优化查询操作是非常有帮助的。 本文主要分为以下三部分: MySQL索引背后的数据结构 索引的几种常见数据结构及其优缺点 索引的算法原理 MySQL索引背后的数据结构…

    数据结构 2023年5月17日
    00
  • C语言实现单链表的基本操作分享

    C语言实现单链表的基本操作分享 什么是单链表 单链表是一种常见的数据结构,它由许多节点按照线性的方式组成。每个节点都包含一个值和一个指向下一个节点的指针。链表最后一个节点的指针通常指向NULL,表示链表的结束。 单链表的基本操作 单链表的基本操作包括插入、删除、查找、遍历等。 插入 当需要在单链表中插入一个节点时,需要先找到它的位置,然后将它插入到链表中。插…

    数据结构 2023年5月17日
    00
  • 【ACM数论】和式变换技术,也许是最好的讲解之一

    在做数论题时,往往需要进行和式变换,然后变换成我们可以处理的和式,再针对和式做筛法、整除分块等操作。 本文将介绍一些常见的和式变换技术。 以下出现的概念大部分为个人总结,未必是学术界/竞赛界的统一说法,有不严谨的地方请谅解。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流…

    算法与数据结构 2023年4月17日
    00
  • Java数据结构之双向链表图解

    以下是Java数据结构之双向链表图解的完整攻略: 一、双向链表简介 1.1 定义 双向链表(Doubly Linked List),也叫双向链式线性表,是链式存储结构的基本形式之一。双向链表的每个节点都含有两个指针,分别指向前驱节点和后继节点,因此可以支持双向遍历。 1.2 结构 双向链表的结构可以用下图表示: +——-+ +——-+ +–…

    数据结构 2023年5月17日
    00
  • C语言超详细讲解数据结构中的线性表

    C语言超详细讲解数据结构中的线性表完整攻略 线性表的概念和基本操作 线性表是指由同类型的数据元素构成的有限序列。即每个数据元素只有一个前驱和一个后继。线性表通常用于表示一维数组、列表、队列等数据结构。 线性表的基本操作包括: 初始化操作:创建一个空的线性表。 插入操作:在线性表中插入一个元素。 删除操作:删除线性表中的一个元素。 查找操作:查找线性表中是否存…

    数据结构 2023年5月17日
    00
  • 一文了解mysql索引的数据结构为什么要用B+树

    MySQL索引的数据结构主要为B+树,那么B+树为什么是最适合作为索引数据结构呢?在介绍B+树之前,我们先来了解下B树。 B树B树是一棵多路平衡查找树,也称为B-树(B-tree),主要应用在文件系统和数据库中,可以显著减少I/O操作次数。B树的每个节点存储的元素个数比二叉查找树的节点多,且节点存储的元素是按顺序排列的,这些特点使得在查找过程中可以快速定位需…

    数据结构 2023年5月17日
    00
  • JavaScript数据结构yocto queue队列链表代码分析

    JavaScript数据结构yocto queue队列链表代码分析 什么是队列? 队列(Queue)是一种基础的数据结构,属于线性结构,它的特点是在队列尾插入元素,同时在队列头删除元素,遵循先进先出(FIFO)的原则。队列可以简单的理解为排队,先到达的先被服务,而后到达的则等在队列尾排队等待。队列的应用非常广泛,例如排队系统、消息队列等。 队列的实现方式 队…

    数据结构 2023年5月17日
    00
  • 图计算引擎分析–GridGraph

    作者:京东科技 李永萍 GridGraph:Large-Scale Graph Processing on a Single Machine Using 2-Level Hierarchical Partitioning 图计算框架 图计算系统按照计算方式划分可分为:单机内存图处理系统,单机核外图处理系统,分布式内存图处理系统,分布式核外图处理系统。本文将详…

    算法与数据结构 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部