自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 数据结构之堆

堆---数据结构

2024-01-21 16:43:47 499

原创 数据结构二叉树--堆(数据结构实现和堆排序的一种实现)

我们可以这样做:用一个指针从左到右依次扫描数组,向上调整算法的使用前提是本身为堆,那我们从下标为1的元素开始,扫描到一个相当于插入了一个,然后用向上调整算法调整为堆,再扫描下一个+调整,扫描完最后一个元素为止。那么这个数组就是一个堆了,如果我们想升序排列,则整理为大堆,先找最大的数据放在最后,如果想降序排列就先找最小的,也就是小堆。这是堆的基本操作,我们如果有一个数组,想借助堆这个数据结构利用额外的空间来实现排序,那么先依次将数据放入堆中,再依次删除并将删除的数据放入到数组中完成排序。

2024-01-15 22:31:41 678

原创 数据结构复习栈和队列

栈和队列的逻辑结构、存储结构以及基本操作和重要习题

2023-12-20 03:25:46 1012

原创 数据结构复习之链表

链表带环问题:让一个指针一次走一步,一个指针一次走两步,若可以遇上则带环,假设慢指针进环的时候,快指针和慢指针相差n个节点,快指针去追赶慢指针,每走一次都会-1,n-1、n-2、n-3最后到0,因此有环一定能追上(但让一个指针一次走一步,一个指针一次走三步就不一定了,看n的奇偶性,可能减不到0)。这是最简单的不带头结点的单链表,也是算法题目中使用最多的一个链表的形式,还有最复杂的带头结点的双向循环链表,插入删除同样是找到前一个节点,只是找的方式更多种多样了,并且要注意删除后的处理。声明好我们的链表节点。

2023-12-04 09:52:34 369

原创 数据结构之顺序表

程序开始,首先定义数据元素,重命名为elemtype,这样不论是结构体还是原子类型的数据类型都可以用它来表示,程序更容易读懂,然后开始创建顺序表,如果是静态实现,则结构体中有一个数据元素类型的数组以及一个num变量用来记录目前存入了多少个数据元素,然后在主函数中创建这个结构体就等于创建完了这个数据结构。第二种,若不额外开创空间,我们需要保证有一个数组的空间是足够装开这两个数组的,然后从最后开始填充,先找最大的放到最后,直至有一个数组遍历到头,然后将另一个数组中的元素依次挪进去即可。

2023-10-18 21:13:28 381

原创 数据结构复习前言以及时间复杂度与空间复杂度

数据结构基础概念

2023-10-12 19:08:14 54

原创 C语言进阶--字符串函数和结构体的进阶以及动态内存管理

c语言的总结

2023-10-10 23:35:18 70

原创 c语言进阶--指针的进阶

指针的进阶

2023-10-02 18:17:41 66

原创 c语言进阶--数据在内存中的存储

数据在内存中的存储

2023-09-22 17:21:14 98

原创 预备阶段高等数学上册总结

预备阶段高等数学上册

2023-09-02 12:25:27 80

原创 c语言复习--数组

对循环的理解

2023-08-27 23:01:52 46

原创 c语言复习--函数

c语言函数有关知识

2023-08-26 01:09:00 58

原创 对循环语句的理解

1、用getchar清空缓冲区,并将读到的字符打印出来:首先我们知道我们从键盘输入进电脑的东西首先放在缓冲区,再由getchar一个一个字符去拿,比如我们输入了asdf\n,首先读取a,打印a,读取s打印s,读取d打印d,读取f,打印f,读取\n,打印换行,这就是循环体,读取+打印,那么终止条件是什么?是getchar返回值为EOF为止,即输入ctrl+z,因此条件判断部分就是判断getchar的返回值,while((ch = getchar())!

2023-08-21 13:58:35 45

原创 关于c语言选择语句以及循环语句有关知识点的补充

补充

2023-08-16 01:01:06 37

原创 c语言复习(总体简单复习及选择语句循环语句精复习)的感受,以及对scanf和getchar和内存缓冲区的重要理解

先进循环执行一次后再进行条件判断再执行,根据实际情况来挑选这三种语句,平时我们写目录的时候会用到do while,因为我们首先要展示菜单,然后让用户选择,根据选择进入switch语句,当然也可以写成while循环,只不过要在while循环外先展示一下菜单并让用户输入选择,根据实际情况与自己的需求合理灵活运用选择语句与循环语句,一定要灵活。这里面基本没有难点,有一个地方是悬空的else,若不加大括号,else始终只与离它最近的if相匹配,不论写成什么样子的格式都是如此。

2023-08-15 01:41:31 37

原创 递归在链式二叉树中的应用

链式二叉树,可能会有疑问,之前的顺序表、链表、栈、队列都是增删查改,二叉树这个数据结构中为什么没有这些基础操作,是因为二叉树非常复杂,目前这个阶段的增删查改没有意义,首先在链式存储的二叉树中学会控制递归结构,为后面的二叉树的应用打基础,链式二叉树-》搜索树-》AVL树-》B树系列,因此二叉树的学习很复杂,在搜索树部分会有增删查改,这个阶段首先就要打基础,熟悉递归的应用。在二叉树中使用递归前我们先搞清楚,是将递归(分治算法)应用于解决二叉树的问题中去,这是一种比较正确的理解。

2023-06-03 22:52:47 49

原创 二叉树的应用之一---堆

堆排序:首先有一个大小为n的数组,如何排序?删除堆顶最有用,能找出小堆中最小的数据和大堆中最大的元素,也就是找出一个数组中最大或最小的数据,这时候就能稍微体现出堆的用处了,一定会应用于排序中,但是现在如何删除呢?size此时指向的是最后一个数据的后一个位置,我们首先要将首元素和尾部的元素交换,然后删除即可,删除后我们得到的是一个没有堆顶的堆,父亲和兄弟之间的关系没有变,也就是左子树和右子树都是堆,这就是我们向下调整算法使用前的条件,向下调整算法是为了将堆顶的这个数据调整到合适位置,使整体成为一个堆。

2023-05-26 21:03:51 53

原创 栈和队列的实现

栈:只允许从一端删除、插入元素,这就决定了栈这个数据结构的实现用顺序表很合适,也决定了栈先进后出的特点FILO,栈的实现可以通过顺序表实现,也可以通过链表实现,因为栈只需要在栈顶删除插入元素,因此我们用顺序表即可,这样可以大大体现出顺序表的存储密度高、CPU高速缓存命中率高的特点,缺点是当空间不够的时候需要扩容,栈的应用可以应用于迷宫、网页返回上一页、括号匹配问题、二进制求值、递归(递归转非递归)、表达式求值(得到逆波兰表达式并计算,得到波兰表达式并计算等等)。

2023-05-16 15:16:22 45

原创 链表的实现

不带头单链表:创建一个结构体,每个结点都是一个结构体,因为每个节点中包含有不同的数据类型,当一个结点中包含有不同的数据类型的时候就要用到结构体,比如我们在静态线性表中要有一个数据域(数组)和top以及max,当我们的数组中每个单元中存放好几种数据类型时,要创建一个结构体再命名为Elemtype,typedef int Elemtype,这就是一种不用结构体的数据域,这都是为了简化线性表,使之看起来清晰,只包括数据域和另外两个变量,数据域中包含的什么类型的数据就在Elemtype这个结构体类型中找。

2023-05-16 14:40:05 70

原创 顺序表的实现

顺序表

2023-04-16 20:37:30 42

原创 算法的定义和算法的复杂度

算法定义

2023-04-10 22:40:12 105

原创 数据结构前言

数据结构前言

2023-04-10 22:15:41 33

原创 程序环境和预处理

程序环境和预处理

2023-04-08 21:50:08 36

原创 文件操作(2)

文件操作

2023-04-04 00:47:52 29

原创 文件操作(1)

w”只写,把内存中的数据写到文件中,若我们给fopen函数的文件名不存在,若文件不存在,那么会自动创建一个文件;文件如何使用程序来打开?首先我们来了解一个概念——文件指针,每个被使用的文件都会在内存中产生一个相对应的文件信息区,用来存放文件的相关信息(比如文件的名字、状态、位置等等),相关信息在不同的操作系统上都是不同的,这些信息被保存在一个结构体变量中,该结构体类型被重命名为FILE,因此我们需要在程序中创建一个文件指针来找到我们要打开的文件,即这个指针变量中存放的是存放文件信息区的地址。

2023-03-31 22:18:21 94

原创 动态内存管理(2)

动态内存管理,柔性数组

2023-03-27 00:27:23 31

原创 动态内存管理(1)

动态内存管理

2023-03-23 20:02:45 41

原创 自定义类型(2)

自定义类型——联合体

2023-03-20 21:46:38 25

原创 自定义类型(1)

自定义类型(1)

2023-03-20 10:35:33 24

原创 c语言进阶--指针的进阶(2)

c语言进阶--指针的进阶(2)

2023-02-06 22:45:39 42

原创 c语言进阶--指针的进阶(1)

c语言进阶--指针的进阶(1)

2023-02-05 23:59:31 148

原创 c语言进阶--数据在内存中的存储

数据的存储。

2023-02-04 23:10:11 43

原创 c语言基础--结构

结构内成员的访问分为两种,一种是结构体变量访问成员,这里用到.这个操作符,一种是结构体指针访问指向变量的成员,这里通过*(p).(成员名)访问比较啰嗦,我们可以通过指针名->成员名,这种方式来访问结构体比较快捷,在我们希望将结构传入到函数中使用时,我们最好传地址,因为结构体过大,函数压栈的系统开销比较大,效率低,传地址进函数既可以修改结构体中的成员中的值,也可以提升效率。这是c语言基础中的最后一节,后面都是进阶的内容,结构这部分也比较容易理解,分为声明、定义、初始化、成员访问、传参这几部分来讲解。

2023-02-01 22:00:50 41

原创 c语言基础--指针

我们在之前的介绍中融入了不少关于指针的知识点,因此现在对于指针已经有一定的了解了,首先我们来介绍一下什么是指针:要想了解指针我们首先要了解内存,32位的机器有32根线来管理内存,每根线在寻址的时候产生高电压和低电压,也就是一共2的32次方种不同的地址,一个地址管理一个内存单元,一个内存单元有一字节,也就是32位的机器可以管理4gb的内存空间,64位的机器可以管理8gb的内存空间。指针数组:这是一个数组,里面存放的是地址,我们可以用指针数组来管理多个一维数组,以此来模拟一个二维数组的效果。

2023-02-01 21:49:17 31

原创 c语言基础--操作符详解

我们先介绍一下补码,计算机中1表示负数,0表示正数,整数包括正数和负数,正数的原码、反码和补码完全相同,若数字为负数,则得到原码后除最高位(符号位)外其他位取反得到反码,反码+1得到补码,数据都是以补码的形式存储在内存中的,但打印出来的时候还是以原码的形式打印出来的,补码转换为原码的方式也很简单,也是取反加一即可转回原码形式。逻辑操作符:&&、||这两个操作符可以控制求值顺序,例如&&操作符,若左边为假,右边不会参与计算,整个表达式的值为假,若左边为真,才会计算右边的表达式。关系操作符:>=

2023-01-30 12:38:30 79

原创 c语言基础--数组

数组,包括一维数组、二维数组、数组越界、数组作为函数参数的知识

2023-01-30 11:31:36 623

原创 c语言基础--函数

函数的基础

2023-01-25 12:08:54 48

原创 c语言基础一--分支语句与循环语句的总结

c语言控制语句总结

2023-01-23 11:05:39 67

原创 c语言基础详解--循环语句

循环语句的介绍

2023-01-21 13:43:01 75

原创 c语言基础详解--分支语句

分支语句的详解

2023-01-20 17:55:13 164

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除