C++线性表深度解析之动态数组与单链表和栈及队列的实现

C++线性表深度解析之动态数组与单链表和栈及队列的实现

动态数组的实现

动态数组是一种可以动态扩展的数组结构,它的容量可以随着需要而动态增加。在C++中,使用vector类可以实现动态数组的功能。vector类相当于动态分配了一块内存空间,在使用时可以根据需要进行动态扩展。下面是一个示例代码:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> arr; // 定义一个空的vector
    arr.push_back(1); // 向vector中添加元素
    arr.push_back(2);
    arr.push_back(3);
    for (int i = 0; i < arr.size(); i++) { // 遍历vector中的元素
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

示例输出:

1 2 3

单链表的实现

单链表是一种基本的数据结构,它由链表节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在C++中,我们可以自己定义链表节点的结构体,然后通过指针将多个节点串起来,得到一个完整的链表。下面是一个示例代码:

#include <iostream>

// 定义链表节点结构体
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
};

int main() {
    ListNode* head = new ListNode(1); // 创建链表头节点
    ListNode* p = head; // 用指针p记录头节点
    p->next = new ListNode(2); // 添加节点2
    p = p->next; // 移动指针p到节点2
    p->next = new ListNode(3); // 添加节点3
    p = p->next; // 移动指针p到节点3
    while (head != NULL) { // 遍历链表中的元素
        std::cout << head->val << " ";
        head = head->next;
    }
    std::cout << std::endl;
    return 0;
}

示例输出:

1 2 3

栈的实现

栈是一种后进先出的数据结构,可以使用数组或链表来实现。在C++中,我们可以使用STL中的stack类来实现栈的功能。stack类提供了push和pop方法,用于向栈中添加元素和弹出栈顶元素。下面是一个示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> st; // 定义一个空的栈
    st.push(1); // 向栈中添加元素
    st.push(2);
    st.push(3);
    while (!st.empty()) { // 弹出栈顶元素并输出
        std::cout << st.top() << " ";
        st.pop();
    }
    std::cout << std::endl;
    return 0;
}

示例输出:

3 2 1

队列的实现

队列是一种先进先出的数据结构,可以使用数组或链表来实现。在C++中,我们可以使用STL中的queue类来实现队列的功能。queue类提供了push和pop方法,用于向队列中添加元素和弹出队首元素。下面是一个示例代码:

#include <iostream>
#include <queue>

int main() {
    std::queue<int> q; // 定义一个空的队列
    q.push(1); // 向队列中添加元素
    q.push(2);
    q.push(3);
    while (!q.empty()) { // 弹出队首元素并输出
        std::cout << q.front() << " ";
        q.pop();
    }
    std::cout << std::endl;
    return 0;
}

示例输出:

1 2 3

以上就是动态数组和单链表、栈和队列的实现方法,希望能够对初学者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++线性表深度解析之动态数组与单链表和栈及队列的实现 - Python技术站

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

相关文章

  • 带你了解Java数据结构和算法之数组

    带你了解Java数据结构和算法之数组 在本教程中,我们将学习Java中的数组数据结构和对应的算法。让我们先来了解什么是数组。 什么是数组? 数组是一个同类型数据元素的集合,在内存中连续存储。数组具有索引性,我们可以使用索引值来访问数组中的元素。 声明和初始化数组 在Java中,声明一个数组需要指定以下三个参数: 数组的类型 数组的名称 数组的大小 以下是一个…

    数据结构 2023年5月17日
    00
  • 数据结构串的操作实例详解

    数据结构串的操作实例详解 什么是数据结构串? 数据结构串是由若干个字符按照一定的顺序排列而成的线性结构。可以对串进行许多操作,如子串的截取、串的连接、串的替换等等。 数据结构串的基本操作 串的初始化 为了操作一个串,我们需要先定义一个串并初始化,可以通过以下代码实现: #include <stdio.h> #define MAXSIZE 100 …

    数据结构 2023年5月17日
    00
  • Python实现的数据结构与算法之双端队列详解

    Python实现的数据结构与算法之双端队列详解 什么是双端队列? 双端队列是一种具有队列和栈的性质的数据结构,可以在队列两端进行插入和删除操作。双端队列可以实现两端的操作,因此可以在队列两端进行插入和删除操作,既可以像队列一样先进先出,也可以像栈一样后进先出。 双端队列的操作 add_front(item):在队头插入一个元素; add_rear(item)…

    数据结构 2023年5月17日
    00
  • 考研数据结构模板:顺序表、链表、栈、队列

    考研数据结构模板:顺序表、链表、栈、队列 前言 代码风格偏向于考研风格而非算法竞赛风格。 代码实现参考《2024数据结构王道复习指导》。 注释详细、保证看懂。 下面是已实现的数据结构模板: 顺序表SeqList 链表LinkList 双链表DLinkList 顺序栈SeqStack 循环顺序队列CircleQueue 链队列LinkQueue 顺序表SeqL…

    算法与数据结构 2023年4月17日
    00
  • 【ACM博弈论】SG函数入门(1):从巴什博奕到尼姆游戏

    在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。 其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式…

    算法与数据结构 2023年4月17日
    00
  • 一文学会数据结构-堆

    一文学会数据结构-堆 什么是堆 在计算机科学中,堆是一个特殊的树状数据结构。堆通常有如下几个特性: 堆是完全二叉树; 堆中每个节点的值都大于或等于(小于或等于)其子节点的值,这个取值规则称为堆的“属性”; 堆顶元素(即根节点)总是为最大值或最小值。 堆的种类 堆分为小根堆和大根堆两种。小根堆要求每个节点的值都不大于其父节点的值,即A[PARENT[i]] &…

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

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

    算法与数据结构 2023年4月20日
    00
  • 数据结构 C语言实现循环单链表的实例

    首先,在开始讲解数据结构中循环单链表的实现前,需要明确循环单链表的概念以及其与单链表的区别。 循环单链表是一种链式存储结构,与单链表不同的是,在循环单链表的尾部也可以指向链表的头部,形成一个环。因此,我们可以通过尾部的指针来遍历整个循环单链表。 接下来,为了方便理解和学习,我们将使用C语言来实现循环单链表的实例。下面分几个步骤来讲解。 1. 定义结构体和创建…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部