C++ 数据结构

C++ 数据结构概述与应用

随着计算机科学的发展,数据结构和算法已经成为软件开发的重要组成部分。C++ 作为一种广泛应用于软件开发的编程语言,其对数据结构的支持和操作性能尤为关键。本文将介绍 C++ 中的数据结构,包括常用的线性数据结构和非线性数据结构,以及它们在实际应用中的案例。

一、线性数据结构


线性数据结构是指具有一定线性特征的数据组织形式,其中包括顺序存储和链式存储两种形式。

1. 顺序存储

顺序存储是指用一组连续的存储单元依次存储线性表的数据元素。在 C++ 中,可以使用数组来实现顺序存储。以下是一个简单的示例:

#include <iostream>
#include <vector>

using namespace std;

int main() {
vector<int> arr = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}

return 0;
}
2. 链式存储

链式存储是指用一组存储单元存储线性表的数据元素,并通过指针来实现元素之间的链接。在 C++ 中,可以使用类来实现链式存储。以下是一个简单的链表类:

#include <iostream>

class ListNode {
public:
int val;
ListNode* next;

ListNode(int x) : val(x), next(nullptr) {}
};

void printList(ListNode* head) {
while (head != nullptr) {
cout << head->val << " ";
head = head->next;
}
}

int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = nullptr;

printList(head);

return 0;
}

二、非线性数据结构


非线性数据结构是指不符合线性特征的数据组织形式。常见的非线性数据结构有树、图等。

1. 树

树(Tree)是一种非常典型的非线性数据结构,它由一个根节点和若干子节点组成。在 C++ 中,可以使用类来实现树的结构。以下是一个简单的二叉树类:

#include <iostream>
#include <queue>

class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;

TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

void printTree(TreeNode* root) {
if (root == nullptr) {
return;
}

printTree(root->left);
cout << root->val << " ";
printTree(root->right);
}

int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);

printTree(root);

return 0;
}
2. 图

图(Graph)是另一种重要的非线性数据结构,它由顶点和边组成。在 C++ 中,可以使用邻接表或邻接矩阵来实现图的结构。以下是一个简单的邻接表表示的图:

#include <iostream>
#include <vector>
#include <list>

using namespace std;

class Graph {
public:
int v;
list<int>* adjList;

Graph(int vertices) : v(vertices), adjList(new list<int>[vertices]) {}

void addEdge(int src, int dest) {
adjList[src].push_back(dest);
adjList[dest].push_back(src);
}

void DFS(int start) {
vector<bool> visited(v, false);

dfs(start, visited);
}

void d
商务合作QQ:3765323427
Copyright © 2021-2024 冰狐智能辅助. All rights reserved. 浙ICP备15043866号 《冰狐智能辅助服务协议》