数据结构(C语言版)

数据结构(c语言版)代码 第1章 绪论 文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲01 绪论 概述 第一章作为绪论,主要介绍了数据结构与算法中的一些基本概念和术语。对于这些概念术语,我个人不推崇死记硬背,记住了当然好,记不住也没关系,但是一定要做到完全理解。就算嘴上说不出来,心里也一定要明白这个过程的含义。 数据结构 数据(data)是对客观事物的符号表... 阅读详情
AI摘要

该博客基于C语言介绍数据结构。先讲解结构体和typedef自定义数据类型,接着阐述线性表,包括数组、链表、栈和队列,还介绍了树这种非线性结构,重点说明了二叉树的结构与遍历方式,如深度优先和广度优先搜索。

前言

前置知识:学完C语言中的顺序结构、选择结构、循环结构、数组、指针、地址

第一章 结构体和typedef自定义数据类型

1.1 结构体类型

结构体是一个数据类型,允许用户在里面定义其他的数据类型,例如:

struct student
{
	long long no;
	char name[50];
};

这里定义了一个学生的结构体,学号为8字节整型,姓名为字符型数组,大小为50*sizeof(char)

1.2 结构体的使用

结构体直接访问内部成员变量用点号运算符.,指针访问内部成员变量用箭头运算符->,例如有以下结构体

struct test01
{
	int no;
	char* name;
};

要使用结构体类型数据,首先要将结构体数据实例化:

struct test01 t1;

然后有一个结构体指针类型指向原来的t1:

struct test01* pT1 = &t1;

这时候,访问结构体变量就可以用点号运算符和箭头运算符

pT1->name = "Alice"; //等价于t1.name = "Alice";
pT1->no = 1; //等价于t1.no = 1;

其实,pT1->no是(*pT1).no的简略形式 ,二者在作用上完全等价。

1.3 typedef自定义数据类型

自定义数据类型允许用户自己定义数据类型的名称,从而达到精简代码的作用

例如:

typedef struct test02
{
	int a;
	char ch;
	float b;
}T,*pT;

然后我们就可以用T代替struct test02,用pT代替struct test02*了

具体怎么用呢?再来看个例子

T t2;
pT pT2 = &t2;
//...

(其实以上例子就是自定义了一个数据类型T,等价于struct test02)

第二章 线性表

2.1 数组

数组是一个内存连续的线性表,因为其内存连续的性质,数组的增删操作较为麻烦(时间复杂度为O(n)O(n)O(n)),改查操作较为简单(时间复杂度为O(1)O(1)O(1))

2.2 链表

链表的内存通常是不连续的,一个链表的节点通常包含至少两个信息,第一个是当前节点的值,第二个是指向下一个节点的指针,由此,我们可以编写出如下所示的代码

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

为了方便,我们可以再定义Node的指针为node

typedef Node* node;

接下来,创建一个链表

int main() {
    // 创建三个节点
    node n1 = (node)malloc(sizeof(Node));
    node n2 = (node)malloc(sizeof(Node));
    node n3 = (node)malloc(sizeof(Node));

    // 初始化数据
    n1->data = 1;
    n1->next = n2;
    
    n2->data = 2;
    n2->next = n3;
    
    n3->data = 3;
    n3->next = NULL;

    // 遍历打印
    for(node temp = n1; temp != NULL; temp = temp->next) {
        printf("%d ", temp->data);
    }

    // 释放内存(重要!)
    free(n3);
    free(n2);
    free(n1);

    return 0;
}

2.3 栈

栈(Stack)是一个后入先出(LIFO)的数据结构,可以用数组或链表模拟
这里提供一个数组模拟的代码

typedef struct stk
{
	int* arr;
	int length;
}stack;

在栈里面添加元素可以这样操作

arr[length++]=data;

删除操作直接length--;就可以了。
查看栈顶直接return arr[length-1]。

2.4 队列

队列(Queue)是一个先入先出(FIFO)的数据结构,它的操作代码和栈类似,也可以用数组或链表模拟,这里不再提供代码过程。

第三章 树

3.1 树

树是一种非线性的数据结构,由节点和边组成,有一个根节点,每个节点可以有多个子节点,但每个子节点只能有一个父节点。
在这里插入图片描述
这里,Child 1、Child 2、Child 3是Root的子节点,Child 1’s Child和Child 2’s Child分别是Child 1和Child 2的子节点

2.2 二叉树

首先说一句重点,二叉树不是树!(因为树的同级节点是没有方向的,但是二叉树的左子节点和右子节点是有方向的)

2.3.1 二叉树的结构

有一个根节点,每个节点下面最多有两个子节点(其中只有左子节点和只有右子节点的二叉树一定不相等,即使它们的数值相等)

2.3.2 二叉树的遍历

深度优先搜索(DFS)
先序遍历: 根节点->左子节点->右子节点
中序遍历: 左子节点->根节点->右子节点
后序遍历: 左子节点->右子节点->根节点
广度优先搜索(BFS)
按层从上到下、从左到右访问节点

C语言数据结构 1.什么是数据结构 一般来说,用计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序,进行测试,调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。例如,求解梁架结构中应力的数学模型为线性方程组;预报人口增长情况的数学模型为微分方程。然而,更多的非数值计算问题无法用数学方程加以描述。下面请看3个例子。 例1-1图书... 阅读详情

相关推荐

数据结构(c语言版)

二叉树的前中后序遍历 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 200 typedef int TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void createBiTree(BiTree *t) { //先序遍历创建二叉树 in

qq_64096402的博客 1475

数据结构:八种数据结构大全

数据结构 1.1 数据结构概述 数据结构是计算机存储、组织数据的方式;通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能;常用的数据结构有:数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)、散列表(Hash)等; 1.2 数据结构的分类 1.2.1 排列方式 1)集合 集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系; 2)线性结构 线性

緑水長流*z 24万+

数据结构-C语言

字符串 串的简介 在串的操作中,通常以“串的整体”作为操作对象,如在串中查找某个字串,在串中某个位置插入一个子串,删除一个子串等。 串的存储结构 顺序存储(用的多) 静态定义字符串 //静态定义字符串,在编译时刻就确定了串的大小 #include<stdio.h> #define MAXLEN 255 //串的最大长度 typedef struct{ char ch[MAXLEN+1]; //存储串的一维数组 int length; //串的当前长度

weixin_52972575的博客 2855

数据结构(全)

线性结构, 树形结构, 图结构, 排序, 查找, 数据结构, 算法

s6664的博客 11万+

数据结构C语言版

数据结构C语言版

weixin_40704392的博客 3253

数据结构c语言版_【课后习题答案】数据结构(C语言版)(第2版)—习题答案...

资 源 介 绍本次分享内容为课程课后习题答案【教材名称】:数据结构(C语言版)(第2版)【主编作者】:李云清、杨庆红、揭安全【出版社】:人民邮电出版社【ISBN】:9787115207036【目录】:一、概论二、线性表及其顺序存储三、线性表的链式存储四、字符串、数组和特殊矩阵五、递归六、树型结构七、二叉树八、图九、检索十、内排序课后习题答案温馨提示1、资料下载过程中如有问题请联系小...

weixin_39945816的博客 7382

数据结构(c语言版本)

1.基本概念 1.1数据 对客观事物的符号表示,在计算机与科学中是指所有能输入到计算机并被计算机程序处理的符号的总称。 1.2数据元素 是数据的基本单位,在计算机程序中作为一个整体进行考虑和处理 1.3数据对象 是相同性质数据元素的集合,是数据的一个子集 1.4数据结构 是相互间存在一种或多种特点关系的数据元素的集合 1.4.1集合 除了同属一个集合没有其他关系 1.4.2 线性结构 一对一关系 1.4.3树形结构 一对多关系 1.4.4图状结构或者网状结构 多对多关系 .

qq_51591801的博客 7038

数据结构c语言版严蔚敏第二版课后答案

数据结构c语言版第二版课后答案严蔚敏 1.自学编程,难免思路阻塞,收集更新了严蔚敏,吴伟民版《数据结构-C语言版》各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步。这里是所有的源码和课后习题实现目录: 这些源码和答案还有 数据结构 严蔚敏(c语言)第二版PDF书籍 下载地址在文章最下方: 02.本源码与解析涵盖了《数据结构》课本和习题集...

bookanddream的博客 1万+

【免费下载】 严蔚敏数据结构C语言版资源下载

严蔚敏数据结构C语言版资源下载 【下载地址】严蔚敏数据结构C语言版资源下载 本书的第1章综述数据、数据结构和抽象数据类型等基本概念;第2章至第7章从抽象数据类型的角度,分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用;第8章综合介绍操作系统和编译程序中涉及的动态存储管理的基本技术;...

gitblog_09801的博客 1412

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案) 1 绪论 数据结构复习题:绪论 单选题 1、在数据结构中,与所使用的计算机无关的数据叫_____结构。 A存储|B物理|C逻辑|D物理和存储 2、在数据结构中,从逻辑上可以把数据结构分成______。 A动态结构和静态结构|B紧凑结构和非紧凑结构|C线性结构和非线性结构|D内部结构 和外部结构图 3、数据结构在计算机内存中的表示是指_______。 数据的存储结构|数据结构|数据的逻辑结构|数据元素之间的关系 4、在数据结构中,与所使用的计算机无关的是数据的_____

weixin_40704392的博客 3269

数据结构 C语言版|第2版-复习

数据结构 C语言版|第2版-复习 目录数据结构 C语言版|第2版-复习第1章 绪论第2章 线性表第3章 栈和队列第4章 串、数组和广义表 第1章 绪论 1.2基本概念和术语 1.2.1数据、数据元素、数据项和数据对象 数据是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位。数据元素通常用于完整地描述一个对象。例如一名学生记录。 数据项是组成数据元素的、有独立含义的、不可分割的最小单位。例如学生基本信息表中的学号、姓名、性别等。 数据对象是性质相同的数据元素

Villin尼的博客 3876

【最详细】数据结构(C语言版 第2版)课后习题答案全集 严蔚敏 等 编著

【最详细】数据结构(C语言版 第2版)第一章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第二章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第三章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第四章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第五章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第六章课后习题答案 严蔚敏 等 编著 【最详细】数据结构(C语言版 第2版)第七章课后习题答案

weixin_43899069的博客 24万+

严蔚敏数据结构c语言版第二版思维导图

数据结构思维导图 参考严蔚敏数据结构c语言版第二版,自己总结的,仅供参考 第一章 绪论 第二章 线性表 第三章 栈和队列 第四章 串、数组和广义表 第五章 树和二叉树 第六章 图 第七章 查找 第八章 排序 ...

路漫漫小菜狗的博客 6931

数据结构C语言版 学习整理

上学期刚学完c语言版的数据结构,收获颇丰。趁着暑假在此重新回顾整理,也希望能够与大家分享,欢迎批评指正。 配套用书为严蔚敏 清华大学出版社 《数据结构(C语言版)》 详细见更新。啦啦啦,开心鸭。终于自己也有机会把所学分享给大家看惹~ ...

BrittanyC的博客 6384

【计算机三级-数据库技术】操作题大题(第1套)

从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。

放纵小开爱的博客 1103

ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

本文基于landsat5、landsat7、landsat8三种传感器的影像,使用ENVI软件构建郑州市2000-2019年遥感生态指数RSEI。内含ENVI详细操作、使用的公式以及构建结果。

Lexicopperfield的博客 1万+

数据结构c语言版作业答案,数据结构C语言版习题详细的答案.pdf

数据结构C语言版习题详细的答案目录第 1 章 绪论 11.1简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 1第2 章 线性表 9第3 章 栈和队列 36第4 章 串 65以下是关于广义表算法涉及的描述及方法 836 章 树和二叉树 86第7 章 图 109第9 章 查找 111第 1 章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构...

weixin_36173034的博客 1642

NRF52832串口通信避坑指南:从SDK配置到硬件流控(RTS/CTS)实战

本文详细介绍了NRF52832串口通信的实战指南,从SDK配置到硬件流控(RTS/CTS)的完整实现。通过分析UARTE模块特性、解决SDK版本差异问题、正确配置硬件引脚以及实现稳定通信的代码示例,帮助开发者避开常见陷阱,确保高效可靠的串口通信。特别强调了硬件流控在高速通信中的重要性及其实践方法。

weixin_33739646的博客 283

严蔚敏版数据结构(C语言版)算法实现代码

严蔚敏版数据结构(C语言版)算法实现代码数据结构(C语言版)代码实现线性表顺序表 数据结构(C语言版)代码实现 部分采用C++的语法实现 线性表 顺序表与链表 顺序表 代码如下: #include <bits/stdc++.h> using namespace std; #define MaxSize 100 #define ElemType int #define Status int #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10

weixin_45741097的博客 1万+

2021年J题:基于STM32F103的周期信号波形识别与参数测量系统设计(立创EDA+SZPT_ZXL)

本文详细复盘了2021年全国大学生电子设计竞赛J题获奖项目,手把手教你如何基于STM32F103微控制器设计并实现周期信号波形识别与参数测量系统。文章深入剖析了硬件电路设计(包括程控放大、工作点抬升与滞回比较器)与核心软件算法(如动态采样、FFT频谱分析与波形识别逻辑),并分享了DMA传输、FFT库使用等实战要点与避坑指南,为嵌入式信号处理与电赛备赛提供了宝贵经验。

weixin_32673065的博客 230

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3361

《数据结构C语言版》学习笔记

介绍C的几个有用的库函数/算符(需要加载头文件<stdlib.h>)代码介绍sizeof(x)计算变量 x 的长度(字节数)malloc(m)开辟 m 字节长度的地址空间,并返回这段空间的首地址函数的意思是:新开一片大小为 newsize 的连续空间,并把以*p为首址的原空间数据都拷贝进去free ( p )释放指针 p 所指变量的存储空间,即彻底删除一个变量大量的malloc和free会把内存分成很多碎块,不建议无限制的使用普通变量用 . 来引用成员,例如L.elem。

小白的编程学习之旅 696

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098
上一篇: C语言语法规则(下)
下一篇: Java基础语法
Tianshang301
博客等级 码龄2年 50粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值