c/c++基础之数据结构【c++】

c语言基础数据结构

在 C 语言中,有几种基础的数据结构,这些结构是构建更复杂数据结构和算法的基础。下面我将简要介绍几种最基本的数据结构:

1. 数组(Array)

数组是一种线性数据结构,它可以存储固定大小的数据项序列,这些数据项必须是相同的数据类型。例如,一个整型数组可以存储多个整数。

int array[5] = {1, 2, 3, 4, 5};

2. 结构体(Struct)

结构体是一种用户自定义的数据类型,允许你存储不同类型的数据项。结构体对于组织复杂的数据模型非常有用,如书籍、人等。

struct Person {
    char name[50];
    int age;
};

struct Person person1 = {"Alice", 30};

3. 链表(Linked List)

链表是由节点组成的线性集合,每个节点包含数据和指向列表中下一个节点的指针。链表的好处是可以动态地增加和删除节点。

struct Node {
    int data;
    struct Node* next;
};

struct Node* head = NULL;

4. 栈(Stack)

栈是一种后进先出(LIFO)的数据结构。栈只允许在其一端进行添加和移除数据。这可以通过数组或链表实现。

#define MAX 10
int stack[MAX];
int top = -1;

5. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构。队列允许在一端添加数据,在另一端移除数据。

#define MAX 10
int queue[MAX];
int front = 0, rear = -1;

6. 树(Tree)

树是一种非线性的数据结构,用于存储具有层级关系的数据。二叉树是最简单的树形结构,其中每个节点最多有两个子节点。

struct TreeNode {
    int data;
    struct TreeNode* left;
    struct TreeNode* right;
};

7. 散列表(Hash Table)

散列表(也称为哈希表)是一种通过键直接访问数据的数据结构。它通过一个哈希函数来计算数据应该放在哪个位置,以便快速访问。

#define SIZE 10
struct HashTableEntry {
    int key;
    int value;
};

struct HashTableEntry hashTable[SIZE];

c++基础数据结构

在 C++ 中,与 C 语言相比,我们不仅有访问所有 C 语言中的基础数据结构的能力,还可以利用 C++ 的标准模板库(Standard Template Library, STL)来使用更高级的数据结构和算法。下面列举一些在 C++ 中常用的基础数据结构:

1. 数组(Array)

  • C 风格数组:与 C 语言中的数组类似,固定大小,连续内存。
  • std::array:STL 中的固定大小数组,比原生数组提供更多功能。
#include <array>
std::array<int, 5> arr = {1, 2, 3, 4, 5};

2. 向量(Vector)

向量是一个封装了动态大小数组的序列容器。它可以动态地增加和减少元素,并且能够自动管理存储。

#include <vector>
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6);  // 在末尾添加一个元素

3. 字符串(String)

C++ 提供了 std::string 类,用于更容易地处理字符串。

#include <string>
std::string str = "Hello, World!";

4. 列表(List)

列表是一个双向链表,支持快速插入和删除。

#include <list>
std::list<int> mylist = {1, 2, 3, 4, 5};

5. 双端队列(Deque)

双端队列与向量类似,但它允许在头部和尾部快速插入和删除。

#include <deque>
std::deque<int> mydeque = {1, 2, 3, 4, 5};

6. 栈(Stack)

栈是一种后进先出的数据结构,STL 提供了基于模板的实现。

#include <stack>
std::stack<int> mystack;
mystack.push(1);  // 压栈

7. 队列(Queue)

队列是一种先进先出的数据结构。

#include <queue>
std::queue<int> myqueue;
myqueue.push(1);  // 入队

8. 优先队列(Priority Queue)

优先队列是一种支持快速访问最大元素的数据结构,通常实现为最大堆。

#include <queue>
std::priority_queue<int> mypq;
mypq.push(1);

9. 关联容器

  • Map:基于键值对的数据结构,通常实现为红黑树。
  • Set:基于键的集合,元素唯一,通常实现为红黑树。
#include <map>
#include <set>
std::map<int, std::string> mymap;
mymap[1] = "one";

std::set<int> myset;
myset.insert(1);

10. 无序关联容器

  • Unordered Map:哈希表实现的键值对容器。
  • Unordered Set:哈希表实现的集合。
#include <unordered_map>
#include <unordered_set>
std::unordered_map<int, std::string> myumap;
myumap[1] = "one";

std::unordered_set<int> myuset;
myuset.insert(1);

这些数据结构在 C++ 中的实现提供了高效的数据操作能力,使得 C++ 非常适合用于需要复杂数据处理的应用程序。每种数据结构都有其特定的应用场景,理解它们的性能特点和适用场合对于编写高效的 C++ 程序至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值