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++ 程序至关重要。