引言
C语言,作为一种通用的、过程式的计算机编程语言,广泛应用于计算机科学的各个领域。C语言不仅支持基本的编程操作,如变量、函数和流程控制,还提供了丰富的数据结构,如数组、链表、树、图等。这些数据结构可以帮助开发者有效地组织和处理数据,提升程序的效率和可读性。
本文将介绍C语言中的一些基本和进阶的数据结构,并通过实例来展示如何使用它们。
一、基础数据结构
1. 数组(Array)
数组是C语言中最基本的数据结构,它用于存储相同类型的元素。数组可以通过索引访问,实现高效的随机访问。然而,数组的长度是固定的,不能动态调整,这在一定程度上限制了其使用范围。
int arr[10]; // 声明一个整型数组
arr[0] = 1; // 设置数组第一个元素的值
2. 链表(Linked List)
链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以高效地插入和删除元素,但访问特定元素的时间复杂度为O(n)。
struct Node {
int data;
struct Node* next;
};
void insert(struct Node** head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = (*head);
(*head) = newNode;
}
二、进阶数据结构
1. 树(Tree)
树是一种非线性的数据结构,由节点和边组成。每个节点可以包含多个子节点,除了根节点外,每个节点都有一个父节点。树提供了高效的层次访问机制,常用于表示层次结构或进行搜索操作。
下面是一个简单的二叉树结构的例子:
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* newNode(int data) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
2. 图(Graph)
图是由节点和边组成的数据结构,常用于表示对象之间的关系。图可以是有向的或无向的,边可以具有权重。在图论中,图的应用广泛,如最短路径算法、网络流等。
以下是一个简单的无向图结构的例子:
struct Graph {
int numVertices; // 顶点数
struct Edge** edges; // 边数组指针
};
struct Edge {
int src, dest, weight; // 源点、终点和权重
};