C语言中常用的数据结构

这篇具有很好参考价值的文章主要介绍了C语言中常用的数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 数组(Array):一组相同类型的数据元素按一定顺序排列而成的数据结构。

  2. 链表(Linked List):由一系列结点组成的数据结构,每个结点包含数据和指向下一个结点的指针。

  3. 栈(Stack):一种特殊的线性数据结构,只能在栈顶进行插入和删除操作。

  4. 队列(Queue):一种先进先出的线性数据结构,可以在队尾插入元素,在队头删除元素。

  5. 树(Tree):由一组结点和一组连接这些结点的边组成的数据结构,每个结点有一个父结点和零个或多个子结点。

  6. 图(Graph):由一组结点和一组连接这些结点的边组成的数据结构,每个结点可以有零个或多个相邻结点。

  7. 哈希表(Hash Table):一种根据关键字直接访问内存位置以提高查找效率的数据结构,通常用于实现字典、集合等数据类型。                                                                            

 

  1. 数组(Array)

数组是一种线性数据结构,它由一组相同类型的元素按照一定顺序排列而成。C语言中的数组是静态的,即数组的大小在编译时就确定了,不能动态地改变。

示例代码:文章来源地址https://www.toymoban.com/news/detail-717433.html

int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组
for (int i = 0; i < 5; i++) {
    printf("%d ", arr[i]); // 输出数组中的元素
}
  1. 链表(Linked List)

链表是一种动态的数据结构,它由一系列结点组成,每个结点包含数据和指向下一个结点的指针。链表中的结点可以在运行时动态地分配和释放,因此它的大小可以根据需要动态地改变。

示例代码:

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

struct Node* head = NULL; // 定义链表头结点

void insert(int data) {
    struct Node* node = (struct Node*) malloc(sizeof(struct Node)); // 动态分配结点内存
    node->data = data;
    node->next = head; // 将新结点插入链表头部
    head = node;
}

void print() {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
}

int main() {
    insert(5);
    insert(4);
    insert(3);
    insert(2);
    insert(1);
    print(); // 输出链表元素
    return 0;
}
  1. 栈(Stack)

栈是一种特殊的线性数据结构,它只能在栈顶进行插入和删除操作。栈的插入操作称为入栈,删除操作称为出栈。栈的特点是后进先出(Last In First Out,LIFO)。

示例代码:

#define MAX_SIZE 100

int stack[MAX_SIZE];
int top = -1; // 栈顶指针

void push(int data) {
    if (top == MAX_SIZE - 1) {
        printf("Stack overflow");
        return;
    }
    stack[++top] = data; // 将元素入栈
}

int pop() {
    if (top == -1) {
        printf("Stack underflow");
        return -1;
    }
    return stack[top--]; // 将元素出栈
}

int main() {
    push(1);
    push(2);
    push(3);
    printf("%d ", pop()); // 输出3
    printf("%d ", pop()); // 输出2
    printf("%d ", pop()); // 输出1
    return 0;
}
  1. 队列(Queue)

队列是一种先进先出(First In First Out,FIFO)的线性数据结构,它可以在队尾插入元素,在队头删除元素。队列的插入操作称为入队,删除操作称为出队。

示例代码:

#define MAX_SIZE 100

int queue[MAX_SIZE];
int front = -1, rear = -1; // 队头和队尾指针

void enqueue(int data) {
    if (rear == MAX_SIZE - 1) {
        printf("Queue overflow");
        return;
    }
    if (front == -1) {
        front = 0;
    }
    queue[++rear] = data; // 将元素入队
}

int dequeue() {
    if (front == -1 || front > rear) {
        printf("Queue underflow");
        return -1;
    }
    return queue[front++]; // 将元素出队
}

int main() {
    enqueue(1);
    enqueue(2);
    enqueue(3);
    printf("%d ", dequeue()); // 输出1
    printf("%d ", dequeue()); // 输出2
    printf("%d ", dequeue()); // 输出3
    return 0;
}
  1. 树(Tree)

树是一种由一组结点和一组连接这些结点的边组成的数据结构,每个结点有一个父结点和零个或多个子结点。树的根结点没有父结点,每个叶子结点没有子结点。

示例代码:

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

struct Node* createNode(int data) {
    struct Node* node = (struct Node*) malloc(sizeof(struct Node)); // 动态分配结点内存
    node->data = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}

int main() {
    struct Node* root = createNode(1);
    root->left = createNode(2);
    root->right = createNode(3);
    root->left->left = createNode(4);
    root->left->right = createNode(5);
    return 0;
}
  1. 图(Graph)

图是一种由一组结点和一组连接这些结点的边组成的数据结构,每个结点可以有零个或多个相邻结点。图可以是有向的或无向的,有权的或无权的。

示例代码:

#define MAX_SIZE 100

int graph[MAX_SIZE][MAX_SIZE];
int numVertices = 0;

void addEdge(int u, int v) {
    graph[u][v] = 1; // 在u和v之间添加一条边
    graph[v][u] = 1; // 如果是无向图,还需添加一条v到u的边
}

int main() {
    numVertices = 5; // 图中的结点数
    addEdge(0, 1);
    addEdge(0, 4);
    addEdge(1, 2);
    addEdge(1, 3);
    addEdge(1, 4);
    addEdge(2, 3);
    addEdge(3, 4);
    return 0;
}
  1. 哈希表(Hash Table)

哈希表是一种根据关键字直接访问内存位置以提高查找效率的数据结构,通常用于实现字典、集合等数据类型。哈希表的核心是哈希函数,它将关键字映射到一个固定大小的数组索引上。

示例代码:

#define MAX_SIZE 100

struct Node {
    int key;
    int value;
};

struct Node* hashTable[MAX_SIZE];

int hashFunction(int key) {
    return key % MAX_SIZE; // 哈希函数
}

void insert(int key, int value) {
    int index = hashFunction(key);
    struct Node* node = (struct Node*) malloc(sizeof(struct Node)); // 动态分配结点内存
    node->key = key;
    node->value = value;
    hashTable[index] = node; // 在哈希表中插入键值对
}

struct Node* search(int key) {
    int index = hashFunction(key);
    return hashTable[index]; // 在哈希表中查找键值对
}

int main() {
    insert(1, 10);
    insert(2, 20);
    insert(3, 30);
    struct Node* node = search(2);
    printf("%d", node->value); // 输出20
    return 0;
}

到了这里,关于C语言中常用的数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用的数据结构

    数据结构用于组织和存储数据,它是计算机科学中非常重要的概念。以下是一些常见的数据结构: 数组(Array):是一种连续存储的数据结构,用于存储固定数量的元素,元素可以通过索引进行访问。 链表(Linked List):是由一系列节点组成,每个节点包含数据和指向下一个

    2024年02月12日
    浏览(29)
  • 基础+常用的数据结构

    JDK,它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等

    2024年01月22日
    浏览(43)
  • 常用的数据结构 JAVA

    ArrayList:动态数组 1、可以嵌套使用 2、add(x)添加元素x,remove(index)删除某个位置的元素 3、注意list是指向性的,在不确定被指向元素是否会发生变动,最好复制一下被指向元素 1、Java中List类应该主要是一些方法, 方法的实现应该是在ArrayList类中实现 类似下方的A类B类代码:

    2024年02月15日
    浏览(31)
  • Redis的常用数据结构

    String List hash set zset 1.字符串类型是Redis最基础的数据结构 使用场景: 缓存功能 Redis 作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。 计数 使用Redis 作为计数的基础工

    2024年02月14日
    浏览(39)
  • Redis-数据结构及常用命令

    字符串(String)数据结构常用命令: SET key value:设置指定 key 的值; GET key:获取指定 key 的值; DEL key:删除指定 key; INCR key:将指定 key 的值增加 1; DECR key:将指定 key 的值减少 1。 列表(List)数据结构常用命令: LPUSH key value1 value2 …:将一个或多个值插入到列表的头部;

    2024年02月10日
    浏览(42)
  • Redis常用数据结构及原理

    Redis 支持多种数据类型,每种类型都具有不同的特性和用途。以下是 Redis 中常见的数据类型: 1、基本介绍 字符串是最基本的数据类型,可以存储任意类型的数据,如文本、数字或序列化对象。可以使用字符串相关的命令对其进行操作,如 设置值(SET)、获取值(GET)、增

    2024年02月16日
    浏览(86)
  • Unity中常用的数据结构

    Unity中常用的数据结构有以下几种: 数组(Array):是一种线性数据结构,可以存储相同类型的多个元素,并通过索引访问和操作。在Unity中,数组是最常用的数据结构之一,用于存储游戏对象、材质、纹理等。 列表(List):也是一种线性数据结构,与数组类似,但具有更灵

    2024年02月04日
    浏览(37)
  • 【数据结构与算法】常用排序算法对比

    常用排序算法对比 相关术语解释 : 稳定:如果 a 原本在 b 前面,而 a = b,排序之后 a 仍然在 b 的前面。 不稳定: 如果 a 原本在 b 前面,而 a = b,排序之后 a 可能出现在 b 的后面。 内排序:所有排序操作都在内存中完成。 外排序:由于数据太大,因此把数据放在磁盘中,而

    2024年02月15日
    浏览(45)
  • 【C#基础】C# 常用数据结构

    序号 系列文章 4 【C#基础】C# 变量和常量的使用 5 【C#基础】C# 运算符总结 6 【C#基础】C# 常用语句讲解 😀大家好,我是writer桑,前面一章已经学习了 C# 中常用语句的用法,那本章就开始学习 C# 程序中 常用的 数据结构的介绍与用法,希望看完大家能够有所收获,感谢支持!

    2024年02月06日
    浏览(29)
  • 数据结构和常用排序算法复杂度

    插入操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数n/2 删除操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n-1)/2 按值查找时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n+1)/2 头插法O(n) 尾插法O(n) 按序查找O(n) 按值查找O(n) 插入

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包