
笔记
文章平均质量分 81
皆自落
这个作者很懒,什么都没留下…
展开
-
结构体的食用方法(struct)
系列文章目录struct的概念与应用、定义等文章目录系列文章目录 前言 一、struct的概念 二、struct的应用 1.语法 2.读入数据 3. 前言在实际问题中,一组数据往往具有不同的数据类型。为了解决这个问题,c语言中给出了另一种构造数据的类型——“结构”。他相当于其他高级语言中的记录。一、struct的概念是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。 是一种复合数...原创 2021-10-26 20:53:42 · 1036 阅读 · 10 评论 -
详解——八大排序(十分钟带你吃透)
目录0. 前言1. 插入排序2. 希尔排序3. 冒泡排序4. 1快速排序(hoare版本)4. 2快速排序(挖坑法)4. 3快速排序(前后指针法)4.4快速排序(非递归法)5. 选择排序6. 堆排序7. 1 归并排序(递归实现)7. 2归并排序(非递归实现)8. 计数排序9.八大排序时间复杂度0. 前言众所周知,对于顺序表,以二分法查找一个数,算法时间复杂度为O(nlongn)。因而,一次排好序,便可以节约很多查找的时间。..原创 2022-04-28 10:00:00 · 1847 阅读 · 7 评论 -
浅谈——堆(数据结构)
一、堆的性质堆是一种特殊的树。只要满足以下两点,它就是一个堆:堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。第一点,堆必须是一个完全二叉树。完全二叉树要求,除了最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列,自然堆也具有完全二叉树的所有性质。第二点,堆中的每个节点的值必须大于等于(或者小于等于)其子树中每个节点的值。实际上,我们还可以换一种说法,堆中每个节点的值都大于等于(或者小于等于)其左右子节点的值。这两种表述是等价的。对于每原创 2022-04-10 20:33:26 · 5294 阅读 · 13 评论 -
老头环三周目通关的我太无聊了来写个队列(数据结构)
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。与栈结构不同的是,队列的两端都"开口",要求数据只能从一端进,从另一端出,如图 1 所示:图 1 队列存储结构通常,称进数据的一端为 "队尾",出数据的一端为 "队头",数据元素进队列的过程称为 "入队",出队列的过程称为 "出队"。不仅如此,队列中数据的进出要遵循 "先进先出" 的原则,即最先进队列的数据元素,同样要最先出队列。拿图 1 中的队列来说,从数据在队列中的存储状态可以分析出,元素 1 最先进队,其.原创 2022-04-08 21:00:00 · 933 阅读 · 3 评论 -
一分钟带你了解树的性质(数据结构)
目录树的基本概念有序树无序树森林二叉树的特点二叉树的性质满二叉树(特殊的完全二叉树)完全二叉树结点数、度数、高度之间的关系(1)n=总度数和(分支数)+1=n0+n1+n2+~~(2)度数为m的树上第i层最多有m^(i-1)个结点(3)具有n个结点的m叉树的最小高度为logm[n*(m-1)+1](4) 具有n个结点的m叉树的最大高度为n-m+1树的基本概念节点的度: 子树的个数树的度: 所有节点度中的最大值叶..原创 2022-04-03 10:41:09 · 4094 阅读 · 13 评论 -
(数据结构)上厕所的时间就能看懂单链表和顺序表
目录顺序表单链表顺序表 单链表顺序表类似于数组,元素都是相邻的,这也决定了它比较容易和比较适合查询。但缺点就是长度有限。时间复杂度查询操作 O(1) 插入和删除操作 O(n)代码实现#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>typedef int SLDateType;typedef struct SeqList{原创 2022-03-30 21:00:00 · 122 阅读 · 9 评论 -
详解栈和队列(链栈)
链栈,即用链表实现栈存储结构。链栈的实现思路同顺序栈类似,顺序栈是将顺序表(数组)的一端作为栈底,另一端为栈顶;链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如图 1 )所示:图 1 链栈示意图将链表头部作为栈顶的一端,可以避免在实现数据 "入栈" 和 "出栈" 操作时做大量遍历链表的耗时操作。链表的头部作为栈顶,意味着:在实现数据"入栈"操作时,需要将...原创 2022-03-27 21:17:28 · 603 阅读 · 17 评论 -
详解栈和队列(顺序栈)
同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的链式存储结构,如图 1 所示。图 1 栈存储结构示意图从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求:栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示; 在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿图 1 的栈来说,从图中数据的存储状态可判断出,元素 1 是最先进的栈。因此,当需要从栈中取出元素 .原创 2022-03-27 21:05:31 · 1365 阅读 · 8 评论 -
动态内存的管理
前言: 通常我们使用数组的时候:必须提前用一个常量来指定数组的长度,同时它的内存空间在编译的时候就已经被分配了。但是有时候数组的长度只有在运行的时候才能知道。因此,一种简单的解决方案就是提前申请一块较大的数组,可以容纳可能出现的最多的元素; 使用这种放的的优点就是非常简单;但是也存在很大的缺点:1、人为因素太大,如果元素数量超过声明的长度,就会发生数组越界,避免的方法就是在声明大一点,很浪费内存;2、如果实际使用的元素比较少的话,就会有大量的内存被浪费掉...原创 2022-03-20 13:00:00 · 922 阅读 · 1 评论 -
动态内存分配
动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存。前面所写的程序大多数都是在栈上分配的,比如局部变量、形参、函数调用等。栈上分配的内存是由系统分配和释放的,空间有限,在复合语句或函数运行结束后就会被系统自动释放。而堆上分配的内存是由程序员通过编程自己手动分配和释放的,空间很大,存储自由。堆和栈后面还会专门讲,这里先了解一下。传统数组的缺点“传统数组”就是前面所使用的数组,与动态内存分配相比,传统数组主要有以下几个缺点:.原创 2021-12-20 20:00:00 · 1151 阅读 · 12 评论 -
C语言小游戏——井字棋
前言:在我们小时候经常上课开小差,与同桌下“井字棋”---也叫“三子棋”,想不想在vs上重温小时候的快乐,往下看看吧!目录完整代码今天要完成一个相对于之前学习更有挑战性的小程序——三子棋。相信我们大部分人都接触过三子棋,这是一款操作简单易上手的小游戏。先简单介绍一下三子棋的规则,方便我们接下来的编程和理解。规则如下:在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。规则很简单,但是我们应该从哪里入手完成这个三子棋程序呢?首先..原创 2021-11-11 21:19:12 · 2405 阅读 · 4 评论