- 博客(14)
- 收藏
- 关注
原创 数据结构——栈(C语言实现)
目录结构定义结构操作代码实现结构定义 栈是一种先进后出的数据结构(FILO),类比现实中的例子就是放羽毛球的圆筒,最先放进去的,会最后才拿出来用。栈是一种顺序结构,用一段连续的存储空间存储元素,所以可以用动态数组。使用栈一般都是用于处理具有完全包含关系的问题,例如括号匹配。数据空间data。动态开辟数组空间。空间大小size。记录数组空间的大小。栈顶元素下标top。记录当前栈顶元素在数组中的下标。结构操作初始化init()。创建栈并初始化栈空间。清除栈clear()。清除栈空间。入
2021-01-03 16:41:40
562
1
原创 数据结构——队列(C代码实现)
目录普通队列结构定义结构操作代码实现循环队列结构定义结构操作代码实现普通队列结构定义 队列是一种先进先出FIFO的数据结构,即最先进入队列的数据,也是最先退出队列的,就像排队一样,其结构包括:存储空间data。队列是用一段连续存储空间存数据的,所以存储空间可以用动态数组实现。队列容量size。用于记录队列动态数组空间的大小。队首下标head。用于记录队列的首位元素存储在动态数组的哪个下标中。队尾下标tail。根据结构操作代码设计的不同,可以用于记录队列末尾元素存储在动态数组的哪个下标中,或
2020-12-22 19:44:05
694
原创 数据结构——并查集(C代码实现)
目录结构定义结构操作不同的算法实现Quick-Find算法Quick-Union算法结构定义 并查集本质上是基于染色的思想,将属于相同集合内的元素染成相同的颜色;一开始所有元素的颜色是不同的,通过合并两个元素的操作,将其中一个元素的颜色染成另一个元素的颜色。 简单地,我们可以使用数组来存元素的颜色状态,因为使用了数组,所以还需要记录数组的大小。结构操作初始化并查集init()。创建并初始化并查集的存储空间。获取元素的颜色find()。返回当前元素的颜色。合并两个元素merge()。将其
2020-12-14 16:55:08
532
原创 数据结构——堆(C代码实现)
目录堆的结构定义堆的结构操作大顶堆代码实现堆的结构定义 堆本质上可以看作是一棵完全二叉树,如下图所示: 存储数据的空间为一段连续的空间,类似于数组,实际上也确实是用动态数组存的数据,假设根结点下标为i,则它的左孩子下标为2 * i + 1,右结点下标为2 * i + 2。上图表示为数组则是这样的:heap[13] = {20, 18, 16, 12, 8, 10, 14, 3, 5, 6, 4, 7, 2} 堆的数据空间维护了一种特殊的性质,那就是第一个数一定是所有数据最大或最小的,首
2020-12-07 16:47:59
240
原创 二分查找详细讲解(C 代码演示)
文章目录引言普通二分查找特殊二分查找000111型111000型特殊二分查找的应用——二分答案引言 二分查找是时间复杂度为O(logn)的简单算法,适用于在有序的数组中查找想要的数据,这里的数组也可以换成具有单调性的函数,把函数的传入值类比成数组的下标,函数的返回值类比成数组内这个下标存储的元素,那么函数就是不用开辟额外空间存储元素的压缩数组。普通二分查找 假设数组中数据的值是单调递增的,定义左边界left和右边界right,从中间下标mid =(left + right)/ 2开始搜索目标
2020-11-30 18:11:56
684
原创 数据结构——二叉树的先序遍历、中序遍历、后序遍历(C++代码实现)
什么是先序、中序、后序?如上图所示,是一个简单的二叉树,这三个名词中的序代表的当然是顺序的意思,并且是父亲结点与子节点之间输出的顺序。先序遍历,指的是父亲结点第一步输出,第二步输出左子结点,第三步输出右子结点。图中二叉树的先序遍历输出就会是这样:1->2->4->5->3->6->7中序遍历,指的是父亲结点在第二步输出,第一步输出左子结点,第三步输出右子结点。图中二叉树的中序遍历输出就会是这样:4->2->5->1->6->3-&g
2020-11-15 21:07:19
3941
原创 数据结构——链表(C++代码实现)
链表的介绍链表是由元素之间互相依赖,串联而成的。链表存储的每一个元素,都是由数据域和指针域两部分组成,称为链表的一个结点。数据域存储数据,指针域存储下一结点的地址。链表的特点链表的内存空间是不连续的,这导致链表无法做随机访问的操作,获取数据只能从头往后遍历;数组与链表相比,不是查询快,而是数组可以随机访问,很多人会把查询和随机访问混淆了,查询是查找存储的特定数据,随机访问是访问指定位置的内容。链表的实现下面来用C++代码实现链表的构建、插入、遍历、删除功能。1.单链表#include <
2020-11-09 17:19:12
2639
原创 C语言中typedef的三种用法
在C语言中,typedef是用于将变量类型重命名的系统关键字,可以重命名的类型有:内建类型typedef long long lint;long long a;lint b;将系统定义的long long类型重命名为lint,使用时只需将类型名写成lint即可。typedef char * string;char *c;string d;相同的将char *类型重命名为string。结构体类型typedef struct test { char n;} Test,
2020-11-02 22:20:30
5189
2
原创 C语言如何写一个变参函数?
头文件stdarg.h想要在C语言中写变参函数,首先要知道va_list,va_start,va_arg,va_end,它们都包含在头文件stdarg.h中。va_list 为数据类型,用于定义储存参数列表的地址的指针变量。va_start为宏定义,作用是将第一个参数后的地址赋给va_list类型定义的指针变量。va_arg 为宏定义,作用是取出参数列表的参数值。va_end为宏定义,作用是将va_list类型定义的指针变量指向空地址。在stdarg.h头文件中,它们是被这样定义的:#de
2020-10-26 20:48:34
745
原创 初识makefile,简单的使用步骤
makefile是什么Makefile就像是一个shell脚本,可以执行操作系统的命令。基本使用规则下面简单说明了如何编写完成一个简单的makefile脚本。基本编写规则:目标:[依赖] 执行指令 ...main.o: main.c gcc -c main.c注意执行指令前面是有输入一次tab键的。[依赖]为可选内容。定义变量Variable = this is variable =为赋值符号,把右边的值赋给左边的变量名。右边的值可以是一段无意义字符串,也可以是shell命令。
2020-10-19 20:37:15
213
原创 strcpy,strncpy,memcpy的使用注意事项
目录strcpystrncpymemcpystrncpy 和 memcpy 的区别内存重叠的理解strcpychar* strcpy(char* des,const char* src);strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间。使用时要注意:des的长度 >= src的长度,否则会造成数组越界的隐患。src的字符串中间不要有NULL,或者说是’\0’,否则会导致字符串复制不完整的问题。注意不要内存重叠。strncpychar* s
2020-10-11 22:14:32
827
原创 C语言构造类型的学习
1. 结构体(1)概念:1)结构体就是存放不同类型数据的集合;2)结构体内部可以放入数组;3)结构体内部可以放入结构体。___________________________________________________________(2)结构体定义的代码示例:struct Person{ int number; char sex; double money;};struct Person p1;//struct Person是类型;p1才是结构体变量。//结构体初始化s
2020-09-27 22:22:35
183
原创 C语言scanf()函数使用的注意事项
scanf()函数相信就算刚学C语言的朋友也知道,这是一个标准输入函数,它是从标准输入流stdin中读内容的。它的第一个参数是格式化字符串,后面跟着的存储内容的地址列表。如果在全段代码中,只调用一次,且只获取一个变量内容的话,一般不会出现什么问题。不过在多次调用或者在一次调用中获取多个变量内容,代码往往会出现不符合预期的结果,下面由我给大家说明一下我自己在调用时出现过的问题,以及解决办法。1. 多次调用scanf()函数,每次调用都获取一个字符变量内容,但是存储的字符变量内容与实际输入不符。#incl
2020-09-20 17:12:33
1018
1
原创 一个程序是如何生成的
很多刚接触编程的同学,应该都会学到一个“Hello world”的程序,通常教程中都会教先安装一个IDEA,然后在IDEA中敲入代码,编译然后运行,简单的“Hello world”程序就完成了。但你是否有想过从敲完代码后的源文件,到输出“Hello world”的可执行文件,这中间到底经历了什么过程呢?下面由我根据最近学到的知识,讲解一下这中间经历的过程吧。
2020-09-10 12:47:30
858
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人