C++中的数组、链表与哈希表

C++中的数组、链表与哈希表

数组

数组是一种数据结构,它存储的是一组相同类型的值。数组中每个元素的类型都是相同的,而且数组中的元素是按照一定的顺序排列的。C++中的数组是有序的,并且可以通过下标来访问数组中的元素。

数组的定义和初始化

在C++中定义数组的语法如下:

type arr_name[arr_size];

其中,type表示数组元素的类型,arr_name为数组名,arr_size表示数组的大小。例如:

int arr[5];

这样就定义了一个有5个整数元素的数组。

在定义数组时,也可以对其进行初始化。初始化可以在定义数组时进行,也可以在定义完成后再手动进行。例如:

int arr1[5] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 5};
int arr3[5] = {1, 2};

第一种方式中,数组的大小为5且每个元素的值为{1, 2, 3, 4, 5}。第二种方式中,由于数组的大小被省略了,所以编译器会根据初始化列表中的元素数量来计算数组的大小,这里的大小也是5。第三种方式中,数组的大小为5,但是只有前两个元素为1和2,后面三个元素会被默认初始化为0。

数组的访问和修改

由于数组是有序的,可以通过下标访问数组中的元素,下标从0开始。例如:

int arr[5] = {1, 2, 3, 4, 5};
cout << arr[0] << endl; // 输出1
cout << arr[2] << endl; // 输出3

也可以通过下标修改数组中的元素。例如:

int arr[5] = {1, 2, 3, 4, 5};
arr[0] = 10;
cout << arr[0] << endl; // 输出10

链表

链表是一种常见的数据结构,在链表中,每个元素包含了对下一个元素的引用,因此链表中的元素是可以动态添加和删除的。链表中的元素称为节点,每个节点中包含了当前节点的值和指向下一个节点的指针。C++中的链表是由指针实现的。

链表的定义和访问

在C++中定义链表的语法如下:

class Node {
public:
    int val;
    Node* next;
    Node(int x) : val(x), next(NULL) {}
};

其中,每个节点包含了一个整数val和指向下一个节点的指针next。链表实际上是由若干个Node节点组成的。

在定义链表时,一般需要定义一个头节点,其next指针指向第一个节点。例如:

Node* head = new Node(0);
head->next = new Node(1);
head->next->next = new Node(2);

这样就定义了一个包含三个节点、值为{0, 1, 2}的链表。可以通过遍历链表来访问每个节点:

Node* p = head;
while (p != NULL) {
    cout << p->val << endl;
    p = p->next;
}
链表的插入和删除

链表可以动态添加和删除节点,因此其长度是可以动态变化的。在链表中插入一个节点时,需要将前一个节点的next指针指向新的节点,新的节点的next指针指向后面的节点。例如,在链表中插入一个元素3:

Node* new_node = new Node(3);
new_node->next = head->next->next;
head->next->next = new_node;

这样会将3插入到1和2的中间。

在链表中删除一个节点时,需要将前一个节点的next指针指向后一个节点。例如,删除元素2:

head->next->next = head->next->next->next;

这样会将2从链表中删除。

哈希表

哈希表是一种高效的数据结构,可以用来存储键-值对。哈希表是由若干个桶(bucket)组成的,每个桶中包含了一个键-值对的链表。哈希表的键被哈希函数映射为一个索引,这个索引指向了具体的某个桶。当需要查找某个键对应的值时,先将键通过哈希函数计算出索引,然后再在相应的桶中查找。如果哈希函数设计得好,就能保证对于不同的键,它们被哈希到不同的桶中,这样就能保证查找的效率。

哈希表的定义和初始化

C++中的unordered_map实现了哈希表的功能,其定义语法如下:

unordered_map<key_type, value_type> mp;

其中,key_type为键的类型,value_type为值的类型。可以通过以下方式初始化哈希表:

unordered_map<int, int> mp = {{1, 2}, {3, 4}, {5, 6}};

这样就创建了一个包含三个键值对的哈希表,其中键为{1, 3, 5},值为{2, 4, 6}。

哈希表的插入和删除

向哈希表中插入一个键-值对时,可以使用map的insert函数,例如:

mp.insert({7, 8});

这样就可以将键为7、值为8的键值对插入哈希表中。如果该键已经存在,则不会进行插入操作。

删除一个键-值对时,可以使用map的erase函数。例如:

mp.erase(3);

这样就可以将键为3的键值对从哈希表中删除。如果该键不存在,则不会进行删除操作。

示例说明

数组示例:

int arr[] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i < 5; i++) {
    sum += arr[i];
}
cout << sum << endl; // 输出15

这个示例演示了如何遍历数组,求出数组中所有元素的和。

链表示例:

Node* head = new Node(0);
head->next = new Node(1);
head->next->next = new Node(2);
Node* p = head->next->next;
head->next->next = head->next->next->next;
delete p;

这个示例演示了如何在链表中删除一个节点。首先创建了一个链表,然后找到链表中的第三个节点,并删除它。

哈希表示例

unordered_map<string, string> mp;
mp.insert({"apple", "red"});
mp.insert({"banana", "yellow"});
mp.erase("apple");
mp.insert({"grape", "purple"});
cout << mp["banana"] << endl; // 输出yellow

这个示例演示了如何创建一个字符串到字符串的哈希表,并进行插入和删除操作。最后输出了键为"banana"的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的数组、链表与哈希表 - Python技术站

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

相关文章

  • PHP 数据结构 算法 三元组 Triplet

    PHP 数据结构 算法 三元组 Triplet 什么是三元组 Triplet 三元组 Triplet 是指由三个数据分别确定一个元素的数据类型。 在 PHP 中可以用一个数组来实现三元组,数组下标表示元素的序号,数组中储存的则是元素的值,共有三个元素。 例如一个三元组 (a, b, c),可以用 PHP 数组表示为 $triplet = array(a, b…

    数据结构 2023年5月17日
    00
  • InputStream数据结构示例解析

    InputStream数据结构示例解析 InputStream是Java中一个重要的数据结构,它表示可以从其中读取数据的输入流。通常情况下,它表示的是用来读取字节流数据的输入流。在本篇攻略中,我们将会详细解释如何使用InputStream数据结构来读取字节流数据,并且给出两条具体的读取示例。 InputStream类的继承结构 InputStream类是一个…

    数据结构 2023年5月17日
    00
  • Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理

    Java Concurrency集合之LinkedBlockingDeque_动力节点Java学院整理 LinkedBlockingDeque是什么? LinkedBlockingDeque是java.util.concurrent包下一个双向阻塞队列,用于在多线程的环境中处理元素序列,它支持在队列两端添加和移除元素。LinkedBlockingDeque可…

    数据结构 2023年5月17日
    00
  • C数据结构中串简单实例

    下面我将为您详细讲解C语言中串的简单实例。 1. 什么是串 在C语言中,串(String)是由一系列字符组成的序列,是一种常见的数据类型。在C语言中,串通常是以字符数组(Char Array)的方式进行存储的。 2. 定义和初始化串 在C语言中,定义和初始化串可以通过以下方式进行: #include <stdio.h> #include <…

    数据结构 2023年5月17日
    00
  • java数据结构之树基本概念解析及代码示例

    Java数据结构之树基本概念解析及代码示例 树的基本概念 树(Tree)是一种非常重要的数据结构,它以“分支和层次”为特点,常用于组织数据,如目录结构、文件系统、网络结构等。 树是由节点(Node)构成的集合,其中有一个节点为根(Root),其他节点被称为子节点。每个节点都有一个父节点,除根节点外,每个节点可以有多个子节点。节点之间的关系称为边(Edge)。…

    数据结构 2023年5月16日
    00
  • Java数据结构之HashMap和HashSet

    Java数据结构之HashMap和HashSet HashMap 介绍 HashMap是一种基于哈希表实现的Map集合,它提供了快速的插入、查询、删除操作。HashMap中存储的元素是以键值对(Key-Value)的形式存储的,其中Key是用来从Map中查找值的索引,Value是存储在Map中的值。HashMap中的Key和Value都可以为null,但是在…

    数据结构 2023年5月17日
    00
  • C++实现KDTree 附完整代码

    对于“C++实现KDTree 附完整代码”的攻略,我会分为以下几个部分进行讲解: KDTree的基本概念和算法原理 KDTree的实现思路和整体代码结构 KDTree在实际应用中的应用场景 两个示例应用说明 KDTree基本概念和算法原理 KDTree全称是K-Dimensional Tree,即K维树,是一种便于高维空间数据检索的数据结构。其基本思路是对于…

    数据结构 2023年5月17日
    00
  • Java面试题冲刺第十三天–数据库(3)

    当我们准备面试数据库相关的职位时,需要掌握SQL语言和常见的数据库管理系统。下面是针对Java面试中可能出现的常见数据库面试题的一些攻略。 1. 数据库连接的常见方式 在Java中,要与数据库连接有两种方式:JDBC和ORM框架。 (1) JDBC JDBC是Java连接数据库的标准方式,使用JDBC可以通过Java程序来连接不同的数据库。连接数据库的步骤包…

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