![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言和初阶数据结构笔记
文章平均质量分 80
入门C语言初阶和进阶C语言,
数据结构初阶C实现
今年依旧去年春
发布文章是记录自己的学习过程,并且方便复习,希望对大家有帮助
展开
-
一遍过七大排序+计数排序
常见的算法有:插入类型、选择类型、交换类型和归并类型,细分又可分为以下几种排序思想,这篇文章将带领大家一遍解决这些排序算法,期待我们都能有所收获。一、插入排序原创 2022-04-28 23:39:52 · 1638 阅读 · 42 评论 -
二叉树的层序遍历
二叉树层序遍历:即设根节点所在层数为1,从第一层开始,从上往下,每层从左往右遍历。原创 2022-04-21 11:25:09 · 5641 阅读 · 44 评论 -
二叉树的构建
上篇文章中,对二叉树基本操作的前提是我们手动构建了一颗二叉树,那么二叉树正确的构建方式是怎样的呢,这篇文章通过牛客网 练习题:KY11 二叉树遍历 来对正确构建二叉树进行讲解。目录做题链接如下:题目描述分析图解如下代码实现定义二叉树结点创建数组,输入相应字符串前序创建二叉树中序遍历中序构建二叉树后序构建二叉树做题链接如下:二叉树遍历_牛客题霸_牛客网 (nowcoder.com)题目描述 手动输入先序遍历字符串,则是先序构建成二叉...原创 2022-04-19 18:00:44 · 1833 阅读 · 15 评论 -
二叉树的遍历+基础练习
前面完全二叉树适合存放数据,又因为它在内存中连续存储,因此用顺序表来实现它,并介绍了堆排序及TOP-K问题。今天我们了解一下二叉树的遍历问题,并完成几道二叉树基础OJ题目。二叉树的遍历二叉树的遍历有:前序/中序/后序的递归结构遍历:1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。2. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之间。3. 后序遍历(Postorder Trave原创 2022-04-14 15:53:38 · 8327 阅读 · 51 评论 -
堆排序详解+TOP-K问题
上上篇链接:堆的实现+堆排序_i跑跑的博客-CSDN博客目录分析上上篇堆排序思路时间空间复杂度优化堆排序向上调整建堆分析图解时间复杂度代码实现向下调整建堆分析图解时间复杂度代码实现总结排序思路分析排序思想降序建小堆证明代码实现小堆变大堆:TOP-K问题什么是TOP-K问题?思路时间复杂度空间复杂度代码实现随机数据测试添加排序程序分析上上篇堆排序上篇介绍二叉...原创 2022-04-10 01:07:26 · 1569 阅读 · 33 评论 -
数据结构->二叉树的介绍
一,树的概念和结构1.1 概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。看起来向一颗根朝上的倒挂着的树。子树(分支)间不能有联系,否则不是树形结构。1.2 相关的重要概念 用血缘关系来记忆树的概念双亲节点或父节点若一个节点含有子节点(有分支),则这个节点称为其子节点的父节点;如上图:A是B的父节点孩子节点或子节点一个节点含有的子树的根节点称为该节点的子节点;如上图:B是A的孩子节点节点的度一个...原创 2022-04-07 14:35:48 · 3042 阅读 · 21 评论 -
堆的实现+堆排序
咱们开门见山,直奔主题!!目录一,堆的定义1.概念2.性质3.结构二、堆的实现定义初始化和销毁数据入队堆的插入图解交换函数向上调整函数出堆图解向下调整函数向下调整函数优化堆空判断,堆长,堆顶元素堆元素打印三,堆排序一,堆的定义1.概念堆就是一棵可以自我平衡的完全二叉树,存储结构连续,可看作是顺序表。2.性质堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二...原创 2022-04-05 23:44:43 · 1072 阅读 · 34 评论 -
队列的实现
单链表实现:单链表的实现_i跑跑的博客-CSDN博客目录一、队列的概念二、队列的实现分析:定义初始化和销毁初始化销毁入队,对尾操作出队 ,对头操作判断是否为空队列元素个数队头元素和队尾元素test.c测试栈和队列运行对比一、队列的概念只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特点。入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头二、队列的实现分析...原创 2022-03-27 23:45:55 · 2340 阅读 · 30 评论 -
栈的简易实现
目录栈的概念及结构图示分析栈的实现定义初始化销毁压栈出栈判断栈是否为空数据个数访问栈顶元素头文件测试文件栈的概念及结构一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。(封闭了一端的线性表)压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶图示分析栈是线性表...原创 2022-03-25 22:02:10 · 1021 阅读 · 13 评论 -
实现带头双向循环链表
顺序表的实现:顺序表的实现_i跑跑的博客-CSDN博客单链表的实现:单链表的实现_i跑跑的博客-CSDN博客一、定义从图示可清楚看到它有头结点,每个结点都有双指针,指向前一个结点和后一个节点,根据图示进行定义typedef int Datatype;typedef struct ListNode{ Datatype data; struct ListNode* next; struct ListNode* prev;}ListNode;二、创建结点创建一个双指针的原创 2022-03-25 00:05:59 · 1767 阅读 · 26 评论 -
单链表的实现
继顺序表后,本章我们来实现一个单链表目录1.概念及定义1.1单链表的概念1.2定义结点2.手动创建一个单链表打印函数:效果展示:3.单链表尾部操作3.1尾插创建结点进行尾插注:3.2尾删4.单链表头部操作4.1头插4.2头删5.固定位置操作5.1固定位置插入5.2固定位置删除6.查找及修改7.固定位置后的插入删除8.销毁## 链表的概念 ##链表是一种物理存储结构上非连续、非顺序的存储结构,数...原创 2022-03-17 23:32:37 · 1930 阅读 · 20 评论 -
顺序表的实现
目录1.顺序表的概念2.静态顺序表分析:3.动态顺序表分析:4.顺序表初始化5.顺序表尾部操作5.1尾插空间检查函数实现分析:5.2尾删分析:6.顺序表的头部操作6.1头插分析:6.2头删分析:7.固定位置操作7.1固定位置插入分析:7.2固定位置删除分析:8.查找及打印9.销毁顺序表10.我的菜单及主函数直接上代码:1.顺序表的概念顺序表是用一段物理地址连续的存储单元依次存储数据元素...原创 2022-03-13 16:29:44 · 2980 阅读 · 27 评论 -
算法时间复杂度和空间复杂度
1.什么是算法算法(Algorithm)是对某一特定类型的问题求解步骤的一种描述,是指定的有限序列,字面意思就是用于计算的方法。1.2算法特性1.有穷性:一个算法总是会再执行有限次数后停止。2.确定性:每个步骤都有确定的含义,对相同的输入有相同的输出。3.输入:一个算法有零个或多个输入。4.输出:一个算法有一个或多个输出。5.可行性:算法中每一步都可以通过已经实现的基本运算的有限次运行来实现。2.算法的复杂度通常用算法的复杂度来衡量一个算法的好坏。那么,什么是复杂原创 2022-03-08 13:48:59 · 703 阅读 · 16 评论 -
预处理详解
1.预定义符号__FILE__ __LINE__ __DATE__ __TIME__ __STDC__ //进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C,其值为1,否则未定义 这些预定义符号都是语言内置的。直接应用就可以,例子:2.#define...原创 2022-03-01 21:52:28 · 794 阅读 · 14 评论 -
程序的编译过程
目录1.程序的翻译环境和执行环境翻译环境:执行环境:2.编译的阶段预编译、编译、汇编、链接过程如图示:3.运行环境程序的执行过程每一个源程序需要被机器读懂并且能跑起来,产生我们想要的效果,都需要经过翻译和链接这两个过程,这篇文章前将会带大家理清程序翻译和链接的过程,带领大伙看到程序运行前的不为人知的过程。1.程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境翻译环境:在这个环境中源代码被转换为可执行的机器指令。执行环境:用..原创 2022-02-27 23:45:02 · 1058 阅读 · 11 评论 -
拿下C语言文件操作
对文件的初步认识:1.文件作用:使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。2.什么是文件:文件可以是文本文档、图片、程序等等。总的来说,电脑磁盘上的就是文件。程序设计中,文件有两种:程序文件、数据文件程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。程序文件存储的是程序,包括源程序和可执行程序。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中原创 2022-02-22 16:38:40 · 1353 阅读 · 26 评论 -
简易通讯录的实现
目标:通讯录可以存放1000个人信息,人的信息:性别名字年龄电话住址 菜单打印1.增加联系人2.删除联系人3.查找联系人(修改)4.名字排序联系人 5.展示 6.清空分析:首先通讯录存放联系人,那么通讯录定当是一个数组其次人的信息类型多,因此每个联系人应为结构体最后我们需要知道在通讯录中有效信息的数量(联系人个数)菜单打印:void menu(){ printf("***************************\n"...原创 2022-02-06 11:27:36 · 939 阅读 · 7 评论 -
动态内存管理分析理解
1. 为什么存在动态内存分配*动态内存开辟在堆区*我们已经掌握的开辟内存方式是类型直接定义变量,开辟的内存是固定的,像:int a=20; //在栈空间上开辟四个字节还有数组,我们可以指定开辟空间的大小,像:char arr[10] = {0}; ///在栈空间上开辟10个字节的连续空间但在程序运行时,很多时候我们会遇到内存不够或者内存过多引起的浪费问题,那么有没有那种使用多少内存开辟多少内存的方法?这就是本篇文章要介绍的动态内存。2. 动态内存函数的介绍2.1原创 2022-01-31 23:52:30 · 4269 阅读 · 14 评论 -
自定义类型详解
一、结构体结构体是不同类型变量的集合体1.结构体的声明struct Book { char name[20];//名字 int Price;//价格 char Writer[5];//作者 char Time[20];//日期}; //注意分号不能丢struct为结构体关键字,Book为结构体标签,中间不同类型的变量为结构体的成员。上述现在只是定义了一个结构体类型struct Book。局部结构体变量int main(){ struct原创 2022-01-29 22:30:59 · 1349 阅读 · 14 评论 -
对字符串和内存函数的应用及模拟
字符串,内存函数的用法原创 2022-01-24 14:02:29 · 1219 阅读 · 10 评论 -
数据的存储的那一点点
1.基本的内置类型char //字符数据类型 (1字节) short //短整型 (2字节)int//整形 16位是2字节 32/64位是4字节long //长整型 规定sizeof(long) >= sizeof(int)long long //更长的整形 (8字节)fl...原创 2022-01-20 10:55:46 · 645 阅读 · 9 评论 -
简单例子,拿下操作符
1.算数操作符+ - * / %原创 2021-11-28 21:20:21 · 271 阅读 · 12 评论 -
继三子棋后,征服扫雷
还是说一下:发的这些小游戏都是第一个版本,之后改进的话都会在标题中声明。上一个游戏三子棋: >>步步为营,拿下三子棋<<来看这次扫雷游戏的思路: 1.创建游戏界面菜单 2.创建游戏内容: 初始化场景 打印场景 埋雷 + 扫雷依旧是: 创建 game.h 头文件...原创 2021-11-12 21:34:07 · 3634 阅读 · 4 评论 -
步步为营,拿下三子棋
游戏思路:1.创建游戏界面菜单 2.创建游戏内容:初始化棋盘,打印棋盘,设置两方棋子原创 2021-11-10 15:17:26 · 3814 阅读 · 11 评论 -
数组的总结,初步认识,简单掌握( $ _ $ )
数组(array)是由一系列类型相同的元素构成。一,一维数组1.创建和初始化原创 2021-11-08 21:18:23 · 423 阅读 · 4 评论 -
函数的总结,递归有链接(ง •_•)ง
函数是什么: 函数是用于完成特定任务的程序代码的自包含单元。为什么使用函数:1.可以省去重复代码的编写。2.使程序更加模块化,有利于程序的阅读,修改和完善。原创 2021-11-06 23:15:21 · 210 阅读 · 4 评论 -
函数递归(套娃)
C允许一个函数调用其本身,这种调用过程被称作递归(recursion)这里我们先来看看简单的栗子:主函数main()的自我调用#include <stdio.h>int main(){ printf("你好"); main(); return 0;}大家可以想一下这个程序运行后的结果是--------无限循环打印你好 如下:分析:每次printf("你好");后,都会再次调用 main() , main() 里面有printf("你...原创 2021-11-03 13:23:52 · 320 阅读 · 0 评论 -
分支和循环语句总结:
目录一、分支语句1.if语句2. switch语句在switch语句中不使用break语句的一般形式:在switch语句中每个语句段都使用break语句:在switch的某些语句段中使用break语句default 小提示:二、循环语句1.while循环语句while语句中的breakwhile语句中的continue2.for循环语句for语句中的break for 语句中的continue3.do...while循环语句...原创 2021-10-30 23:03:36 · 514 阅读 · 2 评论 -
初识C语言2
各位铁子们,i跑 我又回来了,之前总结了初识C1:>>初识C语言 1_i跑跑的博客-CSDN博客https://blog.csdn.net/weixin_53316121/article/details/120818086 <<自己来回看了几遍,总感觉有写费力,不知道大家有没有那种感觉:想几句话就说清楚的内容,但越写越多,烧脑筋????。 ...原创 2021-10-20 22:51:16 · 306 阅读 · 7 评论 -
初识C语言 1
最近将c语言笼统的过了一遍,大致知道了面对c我是要学什么,对于之后已经有了大致的规划安排。这里我将给大家展示近期成果,同时也是自我梳理,将所认识了解到的内容排队串起。大致了解,并不是那么细,有什么不对的地方还请各位评论指正(吐槽)。好嘞,废话不多说,内容如下: 程序的基本框架 这里我们先看一个最简单的代码#include <stdio.h>int main(){ printf("hello world"); return 0;}我们想让它跑起来对我们原创 2021-10-18 13:28:39 · 372 阅读 · 5 评论 -
关键词static的用法
1.static 修饰局部变量原创 2021-10-26 13:34:00 · 143 阅读 · 0 评论 -
关键词 typedef 类型重定义(改名卡)
这里我先定义一个无符号整型:unsigned int num = 20;并输出:#include <stdio.h>int main(){ unsigned int num = 20; printf("%d\n",num); return 0;}num=20接下来使用关键词 typedef 来修饰(重命名)无符号整型 unsigned inttypedef unsigned int u;...原创 2021-10-26 11:29:15 · 281 阅读 · 0 评论 -
初识C语言3
由于最近专业课及各种事情的耽搁更新晚了抱歉,但是今天它来了。这里是初识C板块的最后一节,之后的更新将会具体化,更加的详细????1.常见关键词auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct sw...原创 2021-10-26 11:03:14 · 193 阅读 · 0 评论