news 2026/10/14 3:21:47

C语言——数据结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言——数据结构

数据结构——研究数据与数据之间的关系

特点——抽象

运用到数据的操作(指针)

代码的实现上大量的用到指针,所以可以通过画图让抽象关系明确

C语言:

1.语法

2.基本编程思维

3.处理单个或几个变量的数据

处理批量数据(数组+结构体)

数据规模更大(数据结构)

必须理好数据和数据的关系,再结合处理数据的思路(算法)

(好的)程序设计=(好的)算法 + (好的)数据结构

数据:是描述客观事物的符号

数据元素:是组成数据的、有一定意义的基本单位(例如单个学生)

数据项:一个数据元素可以由若干个数据项组成。

(数据项是数据不可分割的最小单位)

数据对象:是性质相同的数据元素的集合,是数据的子集(学生这个身份或者职业的大类)

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

关系:

逻辑结构——反应的是数据与数据之间的相互关系

1.集合:元素与元素之间同属一类

2.线性:元素与元素之间一对一的(排成一个‘链’,有先后次序,每个元素都有自己的前驱节点和后继节点)

3.树形:层次上一对多(1. 有且仅有一个根结点,没有前驱

2. 除根以外,每个结点只有1个前驱(父节点)3. 每个结点可以有0个、1个或多个后继(子节点)4. 结点之间分层,不存在环,不能交叉)

4.图形关系:元素与元素形成多对多(1. 任意两个结点之间都可以相连2. 一个结点可以有多个前驱,也可以有多个后继3. 可以存在环,没有根、没有分层限制4. 边可以有方向(有向图),也可以无方向(无向图)

存储结构(内存本身是线性结构)

顺序存储(数组):增加和删除元素不方便,要移动大量元素,但是找到(访问)某个数据元素很方便。

链式存储结构:增加和删除元素方便,但是访问要遍历,不方便

所以链式结构每个元素需要自己的数据本身和下一个元素的地址

索引结构:

类似于看书——index(目录或者索引)

- 索引表有序;主文件本身可以无序

- 查找:先查索引,找到地址,再去读真实数据

散列(哈希)结构:

用散列函数直接算出关键字对应的存储地址,不需要挨个比较。

公式: Addr = H(key)

输入关键字 key,经过哈希函数,直接得到存放位置。(即由值通过一个哈希函数得到位置)

同一个逻辑关系的数据可以用不同的存储结构(各有各的优缺点)——根据需求选择

设计算法具有的五个特性(考虑的方面):输入,输出,有穷性,确定性和可行性

好算法:

1.正确性

2.可读性

3.健壮性(适合更多的不同情况)

4.时间效率(时间复杂度)和存储率(空间复杂度)低

常用的时间复杂度从小到大

O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)

顺序存储

数组(顺序表)

算法

  1. 创建 int a[10];
  2. 增 inputArray insertArray (插入数据)
  3. 删 deleteArray
  4. 改 modifyArray //找到 修改
  5. 查 findArray //
  6. 销毁

链式: 链表的方式来实现 线性结构

实现: 链表的元素特点描述

包含:

a.数据

b.下一个节点的地址

代码:

typedef int data_t;

struct node

{

data_t data; //数据域

struct node *next; //指针域

};

图示如下

首节点:第一个有效数据节点

尾节点:最后一个有效数据节点,它的指针域为空

定义链表节点类型以及创建头节点代码如下

#include<stdio.h> #include<stdlib.h> typedef int data_t; // 定义链表结点类型,名字别名 node_t typedef struct node { data_t data; // 数据域:存数据 struct node *next; // 指针域:存下一个结点的地址 }node_t; // 创建链表【头结点】 node_t* linklist_create(void) { // 在堆上申请一块node_t大小内存,作为头结点 node_t *head = malloc(sizeof(node_t)); // 判断malloc有没有申请内存失败 if(head == NULL) { printf("linklist_create malloc fail\n"); return NULL; } head->next = NULL; // 空链表:头结点后面暂时没有任何数据结点 return head; // 返回头结点的地址给main函数 } int main(void) { // phead 保存链表头结点的地址,代表整条链表 node_t *phead = linklist_create(); return 0; }

以下是给头节点插入新节点的步骤

把新节点插入一个已经存在的头结点后面也是这样,因为这个时候头结点存的已经不是NULL了,而是原本的头结点后一个节点的地址,这个地址被传递给新节点的指针域,头节点再把指针域等于新节点的地址

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 3:21:40

建材行业私域流量运营模型:从获客到留存复购的全链路设计

一、行业普遍痛点&#xff1a;重获客、轻留存建材行业有一个长期存在的结构性矛盾&#xff1a;获客成本持续走高&#xff0c;但老客价值远未被挖掘。多数门店的运营重心集中在“怎么获取新客户”上——投流、做内容、跑小区、搞活动。但客户成交之后&#xff0c;运营动作基本终…

作者头像 李华
网站建设 2026/10/14 3:21:40

电子元件-电动机综合保护器

简介它就相当于三相电动机的智能保镖&#xff0c;一般和交流接触器搭配一起用。普通热继电器大多只能做过载保护&#xff1b;而电动机综合保护器是电子器件&#xff0c;能实时盯着电机的电流、电压状态。遇到缺相、过载、堵转、三相电流不平衡等各类故障时&#xff0c;它内部的…

作者头像 李华
网站建设 2026/10/14 3:21:32

仿古铝瓦配铝斗拱 鎏金中式门头赋能商业地标引流

在湖南邵阳核心商圈,老庙黄金银楼以一座三层重檐的中式黄金门楼惊艳亮相 —— 飞檐层叠翘然舒展,斗拱错落承托檐宇,通体鎏金质感华贵大气,搭配 “好运楼” 匾额与朱红楹联,既是辨识度拉满的城市商业地标,也是品牌文化与东方美学深度融合的门店形象范本。这座极具视觉冲击力的中…

作者头像 李华
网站建设 2026/10/14 3:21:21

定制LED数码管多少钱常见问题解答(2026专家版)

很多客户在采购定制LED数码管时&#xff0c;最关心的就是价格问题&#xff0c;同时对影响价格的各类因素存在不少疑问。本文整理了客户咨询最多的相关问题&#xff0c;逐一给出专业解答&#xff0c;帮助大家理清定制LED数码管的价格构成&#xff0c;做出更明智的决策。定制LED数…

作者头像 李华
网站建设 2026/10/14 3:21:20

计算机组成原理课后习题答案的避坑与高效使用指南

简介&#xff1a;对应唐朔飞《计算机组成原理》教材的课后习题答案解析&#xff0c;适合高校计算机专业学生复习备考、自测理解程度&#xff0c;也适合考研或自学读者对照教材逐章巩固。内容覆盖第一章概论的核心知识点&#xff0c;包括计算机系统层次结构、高级语言与机器语言…

作者头像 李华