C++
提供了多种数据结构,既有基础的如数组、结构体、类等,也有高级的 STL 容器如 vector、map
和 unordered_map 等。
下面详细介绍 C++ 中常用的数据结构及其特点和用法。
1. 数组(Array)
数组是最基础的数据结构,用于存储一组相同类型的数据。
特点:
固定大小,一旦声明,大小不能改变。
直接访问元素,时间复杂度为 O(1)。
适合处理大小已知、元素类型相同的集合。
int arr[5]={1, 2, 3, 4, 5}; cout<< arr[0];// 输出第一个元素
优缺点:
优点:访问速度快,内存紧凑。
缺点:大小固定,无法动态扩展,不适合处理大小不确定的数据集。
2. 结构体(Struct)
结构体允许将不同类型的数据组合在一起,形成一种自定义的数据类型。
特点:
可以包含不同类型的成员变量。
提供了对数据的基本封装,但功能有限。
示例:
struct Person {
string name; int age; };
Person p ={"Alice", 25}; cout<< p.name<< endl;// 输出 Alice
3. 类(Class)
类是 C++ 中用于面向对象编程的核心结构,允许定义成员变量和成员函数。与
struct 类似,但功能更强大,支持继承、封装、多态等特性。
特点:
可以包含成员变量、成员函数、构造函数、析构函数。
支持面向对象特性,如封装、继承、多态。
class Person { private:
string name; int age; public:
Person(string n, int a): name(n), age(a){} void printInfo(){ cout<<"Name: "<< name <<", Age: "<< age << endl; } };
Person p("Bob", 30);
p.printInfo();// 输出: Name: Bob, Age: 30
4. 链表(Linked List)
链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
特点:
动态调整大小,不需要提前定义容量。
插入和删除操作效率高,时间复杂度为 O(1)(在链表头部或尾部操作)。
线性查找,时间复杂度为 O(n)。
struct Node { int data;
Node* next; };
Node* head = nullptr;
Node* newNode =new Node{10, nullptr};
head = newNode;// 插入新节点
优缺点:
优点:动态大小,适合频繁插入和删除的场景。
缺点:随机访问效率低,不如数组直接访问快。
5. 栈(Stack)
栈是一种后进先出(LIFO, Last In First
Out)的数据结构,常用于递归、深度优先搜索等场景。