数据结构(c语言)

数据结构(c语言)

概要提示:本文将介绍C语言中常见的数据结构,包括数组、链表、栈、队列和树,并解释它们的基本特性和用途。

文章目录

  • 数据结构(c语言)
  • 前言
  • 一、类型简要概括(图例)
  • 二、常见数据结构类型(c语言)
    • 1. 基本数据类型
    • 2. 数组(Array)
    • 3. 结构体(Struct)
    • 4. 联合体(Union)
    • 5. 枚举(Enum)
    • 6. 链表(Linked List)
    • 7. 指针(Pointer)
    • 8. 栈(Stack)
    • 线性与非线性数据结构(类型划分)
    • 9. 队列(Queue)
    • 10. 树(Tree)
    • 11. 图(Graph)
    • 12. 哈希表(Hash Table)
  • 总结


前言

c语言中掌握数据结构的重要性

在C语言中,数据结构不仅是一种存储数据的方式,也是一种处理数据的方法,数据结构在其编程中起着至关重要的作用。下面是一些C语言中常见的数据结构介绍:


一、类型简要概括(图例)

在这里插入图片描述

二、常见数据结构类型(c语言)

1. 基本数据类型

  • 整型(int):用于存储整数。
  • 浮点型(float, double):用于存储小数。
  • 字符型(char):用于存储单个字符。

2. 数组(Array)

数组是一种具有相同类型元素的集合,它们在内存中连续存储。数组可以通过索引来访问其元素,索引从0开始。

示例如下(代码):

int arr[4] = {1, 2, 3, 4};//定义一个整型数组,包含4个元素

3. 结构体(Struct)

结构体是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起。

示例如下(代码):

struct Person {
	char name[50];
	int age;
	float weight;
};

struct Person p1 = {"Lily",19,49}

该处模块记录个人的信息(姓名、年龄、体重)

4. 联合体(Union)

联合体与结构体类似,但不同的是,联合体中的所有成员共享同一块内存空间。因此,联合体的大小等于其最大成员的大小。

示例如下(代码):

union Data {
	int i;
	float f;
	char str[20];
};

union Data d1;//定义一个联合体变量

5. 枚举(Enum)

枚举是一种用户定义的类型,它包含一组命名的整数常量。枚举使得代码更加清晰易读。

示例如下(代码):

enum Color {BLUE, BLACK, WHITE};

enum Color c1 = BLACK;//定义一个枚举变量并赋值

6. 链表(Linked List)

链表是一种常见的数据结构,它由一系列节点组成,每个节点都包含数据部分和指向下一个节点的指针。链表允许在任意位置插入和删除元素,而不需要移动其他元素。

示例如下(代码):

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

struct Node*head = NULL;//定义链表头指针并初始化为NULL

7. 指针(Pointer)

指针是C语言中的一种重要数据类型,它存储了变量的内存地址。通过指针,可以直接访问和操作内存中的数据。

示例如下(代码):

int n = 10;
int *p = &n;//p是一个指向n的指针

8. 栈(Stack)

栈是一种遵循后进先出(LIFO)原则的数据结构,它只允许在栈顶进行插入和删除操作。栈通常用于实现函数调用和表达式求值等功能。

线性与非线性数据结构(类型划分)

在这里插入图片描述

9. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构,它允许在队尾插入元素,在队头删除元素。队列通常用于实现任务调度和消息传递等功能。

10. 树(Tree)

树是一种非线性数据结构,它由节点和连接节点的边组成。树中的每个节点都包含数据部分和指向其子节点的指针。常见的树结构包括二叉树、平衡二叉树、B树等。
在这里插入图片描述

11. 图(Graph)

图是一种复杂的数据结构,它由节点(也称为顶点)和连接节点的边组成。图可以用于表示各种实际问题中的关系网络,如社交网络、交通网络等。

12. 哈希表(Hash Table)

(这一方面较重点,本章这里只是做一个哈希表简要概述,此处附上一位大佬博主的相关讲解链接,可点击这段蓝字跳转进行深入学习

哈希表是一种基于哈希函数实现的数据结构,它允许在常数时间内进行插入、删除和查找操作。哈希表通常用于实现快速查找和动态集合等功能。

示例如下(代码):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TABLE_SIZE 100  // 哈希表大小

// 哈希表节点结构
typedef struct Entry {
    char* key;
    int value;
    struct Entry* next;
} Entry;

// 哈希表结构
typedef struct HashTable {
    Entry* table[TABLE_SIZE];
} HashTable;

// 哈希函数
unsigned int hash(char* key) {
    unsigned long hash_value = 0;
    int c;

    while ((c = *key++)) {
        hash_value = c + (hash_value << 6) + (hash_value << 16) - hash_value;
    }

    return hash_value % TABLE_SIZE;
}

// 创建哈希表
HashTable* create_table() {
    HashTable* table = (HashTable*)malloc(sizeof(HashTable));
    for (int i = 0; i < TABLE_SIZE; i++) {
        table->table[i] = NULL;
    }
    return table;
}

// 插入键值对
void insert(HashTable* table, char* key, int value) {
    unsigned int index = hash(key);
    Entry* new_entry = (Entry*)malloc(sizeof(Entry));
    new_entry->key = strdup(key);
    new_entry->value = value;
    new_entry->next = table->table[index];
    table->table[index] = new_entry;
}

// 查找值
int search(HashTable* table, char* key) {
    unsigned int index = hash(key);
    Entry* entry = table->table[index];
    while (entry) {
        if (strcmp(entry->key, key) == 0) {
            return entry->value;
        }
        entry = entry->next;
    }
    return -1;  // 未找到
}

// 释放哈希表
void free_table(HashTable* table) {
    for (int i = 0; i < TABLE_SIZE; i++) {
        Entry* entry = table->table[i];
        while (entry) {
            Entry* temp = entry;
            entry = entry->next;
            free(temp->key);
            free(temp);
        }
    }
    free(table);
}

int main() {
    HashTable* table = create_table();

    insert(table, "apple", 1);
    insert(table, "banana", 2);
    insert(table, "orange", 3);

    printf("Value for 'apple': %d\n", search(table, "apple"));
    printf("Value for 'banana': %d\n", search(table, "banana"));
    printf("Value for 'grape' (not found): %d\n", search(table, "grape"));

    free_table(table);

    return 0;
}

总结

综合以上内容,数据结构是程序设计的基础,这些数据结构在C语言中有着广泛的应用,它们可以根据具体问题的需求进行选择和组合,以实现高效、灵活的算法和程序。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值