- 博客(33)
- 收藏
- 关注
原创 数据结构与算法——队列、字符串
若不为队满进行入队,入队我们改变rear,只需rear+1即可,在更新rear就行。出队:与入队相反,我们需要判断是否为空,若不为空,我们出队,front保存的是第一个位置,我们只需要将x=q.data[q.front]即可。出队:申请空间,我们出队都是出的第一个指针,因为带头结点所有tail->next->next才是存第一个数据的节点。若都存在进行遍历,若节点所存元素相同,同时指向下一个节点,不同则将第一个子序列从头开始。不为空,我们将s1元素全部插入到s2中,最后将s2最上面元素出栈即可。
2024-08-09 15:07:10
405
原创 数据结构与算法——栈和队列(1)
对这个字符串进行遍历,如果等于左括号将其保存到栈中,如果下次遇到右括号则将与左括号相消,即s.top--。如果为2,s.top=maxsize为空,这里的出栈是将前面的元素出栈,由此可得top当前所指向位置往后移动了,所以top2++入栈:判断合法性,如果s.top2-s.top1=1说明已经满了,没办法再插入,i用来选择是用第一个插入还是第二个插入。我们用栈进行保存所有的H,设置k等于0当为s时直接赋值给A[k],剩余的进行出栈。如果为1,我们要先判断是否为空,若s.top=-1则为空,出栈和之前一样。
2024-08-08 15:17:53
312
原创 数据结构与算法——双链表
设置新节点r,把头节点赋值给r(目的是为了在后遍历时较为方便,将s节点赋值给r这样每次r都指向了最后一个节点(NULL前面那个))我们设置的r每次都是NULL前面一个节点,因而每次尾插s都在r后面,由此r->next=s;s->prev=r;然后我们连接L->next的prev若L->next为空我们不需要建立prev所以需要进行判断是节点还是空。进行数据的输入,若不为9999一直进行尾插,在循环里进行申请空间存储s节点,将数据赋值。头插是将新的节点s插入到L的后面(所以我们不需要像尾插设立一个新节点r。
2024-08-07 14:20:36
292
原创 数据结构算法——链表(1)单链表
前面指针还未指向,L和s中间指针仍然需要指向,要因为我们用r存储了L所以直接将r指针指向后面的s就行。由于p->next数据是x,我们只需将p指向p->next->next并且释放p->next即可,我这里用了r去替换p->next是一样的。可知s->next为我们找到那个指针,s就是前面的因而我们也可以直接写(p->next=s->next;s->next=p;当不为空循环(为什么不是p->next,因为我们用了r保存了p->next,在最后一步时已经时p->next了,所以用p即可)。
2024-08-06 15:05:00
459
原创 数据结构与算法——1、顺序表
int j=0;i<L.length;i++)j=i;if(j!L.length--;return min;思想:将原顺序表第一个元素作为min值进而进行比较。若min比后面的元素大,我们就要更新min把原本数据传给min,同时将下标索引进行保存方便后面判断是否为最后一个元素。保存索引为最后一个即不变返回最小值即可。若不为则用最后一个进行覆盖。
2024-08-05 15:27:10
305
原创 数据结构算法与分析 最大子序列问题的解(2)
将一整个数组分为左右两边,然后不断划分直到最小区间。直到left=right则结束。表示划分的左右子区间的最大和,即递归计算出的左右两部分的最大子序列和。整体思想将一个数组分为,左数组,右数组,还有可以左右都有的数组。用来划分的一个个小的左右区间最大判断。然后进行不断求得小区间最大值。
2024-04-28 20:52:54
231
原创 数据结构算法与分析 最大子序列问题的解(1)
通过三个嵌套循环来进行求解,通过前两个循环逐渐限制第三个循环开始结束位置。从而遍历所有子列。:第一个循环用来遍历所有的数字从而用来限制第三个循环的开始坐标,第二个循环用来限制第三个循环结束的坐标。我们通过将每个小子列与当前最大子列相比较取较大值。
2024-04-28 19:01:45
185
原创 洛谷算法(马的遍历)
题目描述有一个 n m的棋盘,在某个点 (x, y)$上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。输入格式输入只有一行四个整数,分别为 n, m, x, y。输出格式一个 n m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 -1)。样例样例输入3 3 1 1样例输出通过起点位置,开始遍历方向从第一个开始,若不满足则进行第二个方向,循环往后;若满足情况则将其作为新坐标然后继续往后方向遍历。(每次步数加1)
2024-04-24 21:34:32
282
原创 单循环链表
int data;}Node;L->data=0;L->next=L;n=L;=L)n=n->next;=L)free(now);break;elsepre=now;while(node!=L)int main()return 0;
2023-09-02 17:14:35
77
1
原创 扫雷小游戏
初始化棋盘:要分成两个,一个是已经生成全是'0'的棋盘用来自己看,另一个用全是'*'来进行游戏。获取如果点了周围会有几个雷:因为赋值了雷为字符1所以直接相加减去8*'0'建立随机雷的棋盘:已经在棋盘中随机生成了雷为。进行游戏的内容:下棋信息并进行打印。
2023-07-13 10:26:45
39
1
原创 三子棋小游戏
判断输赢 返回为'*'玩家赢 返回'#'为电脑赢 其他则为平局。玩家下棋->选择自己没有下过的位置进行下棋 为'*'电脑下棋->选择玩家没有下的位置进行下棋 '#'初始化棋盘:将所有都初始化为' ';将棋盘样式打印出来;
2023-07-13 10:14:38
35
1
原创 三、 数组
1.sizeof(数组名)内部单独放数组名,这里计算的是整个数组的大小单位是字节。2.&数组名这里表示的是整个数组,取出的是整个数组的地址。C99之前必须是常量,之后可以为变量为了支持变长数组。int double char是数组类型。第二种存储了a b c \0 后面都是0。可以把二维数组理解为一维数组的数组。数组是一种相同类型的元素的集合。由此可得:数组在内存中连续存放。二维数组在内存中存放也是连续的。二维数组不能省略列只能省略行。二维数组数组名表示首元素地址。[]又叫下标引用操作符。
2023-07-13 10:07:17
49
1
原创 递归 及 例题
可以这样想,递归每个步骤的规律都相同。第一个人和第n个人的步骤都相同,而上面的第一个第二个正好不满足此步骤,因而可以为截至条件。想法:截至条件n<=2时返回还是1,费波纳列数时前面一项加上前面的前面的一项所以为f(n-1)+f(n-2)想法在开始时可以选择跳1步或者两步,当台阶数x小于2时,输出为x,其他情况为f(x-1)+f(x-2);想法:原数字乘以前面的数字n*f(n-1),截至条件时n<=2时为2。青蛙跳台:每次可以跳一个台阶或者是两个台阶。编写函数求字符串长度不允许创建零时变量。
2023-07-13 10:01:05
39
1
原创 二、函数 1.函数是什么2.库函数3.自定义函数4.函数参数5.函数调用6.函数的嵌套调用和链式访问
早期并没有库函数的概念又因为经常要求字符串长度strlen、比较两个字符串大小strcmp、打印数据printf又因为当时没有库函数所以每个人写自己的可能会出现冗余。所以最后提供了库函数。
2023-05-15 14:01:38
64
原创 7.操作符 关键字 typedef static
auto:修饰变量 break:跳出循环 case:一般和switch default一起用 const:常属性continue:循环 enum:枚举 extern:声明外部符号 signed:有符号的 unsigned:无符号的 register:寄存器 static:静态的 struct:结构体 typedef:类型重命名 union:联合体、共用体 void:无。除号的两端都是整数的时候,执行整数除法,如果两端只要有一个浮点数那么执行,浮点数除法。1.static修饰的局部变量出了作用域,不销毁。
2023-04-19 22:33:09
70
原创 6.注释 选择语句 循环
c语言是一种程序化的设计语言。do..while()循环。用来解释某部分代码的含义。当一段代码不用可以注释。缺点不支持嵌套式注释。
2023-04-17 12:42:08
54
原创 5.字符串 转义字符
出现这样的原因:因为arr 和 arr1 前后都有内存而这里只是截取了其中的一部分空间,一部分内存,前后仍然有其他的内存 ,当打印arr时直到\0停止,因而可直接输出了abcdef而打印arr1时也需要打印到\0停止,因而继续往后寻找直到找到\0,因此可以直接设置一个 \0 从而用来使得arr1 停止。原本可以打印出abc0def 将原本的数字0转义成了\0成了字符串结束的标志。解释:表示\后面的8进制数字转为10进制后相对应的ASCII码的字符。Abx\\0a使得\0不再是结束的标志。
2023-04-17 12:35:41
106
原创 4.变量 常量
注意:全局变量和局部变量命名可以相同,在相同时他会优先采用局部变量。const修饰的int a不能被改变,他虽然有常量的属性但本质上是变量。2.全局变量:整个程序的生命周期。1.局部变量作用域:变量所在的局部范围。局部变量:{}内部 全局变量{}外部。2.全局变量的作用域:整个工程。在向内存申请空间定义数据类型时注意要初始化。注意:局部变量内不能出现相同的变量命名。作用域:哪里可以用哪里就是他的生命周期。生活中有些不变的:身份证、性别...时刻变化的:体重、年龄...生命周期:1.局部变量。
2023-04-17 12:14:52
33
原创 3.数据类型
整型:short:短整型 int:整型 long:长整型 long long:更长的整型 (注意中间有空格)可能有的long的申请存储空间不一样,但只要大于int就行,c语言规定sizeof(long)>=sizeof(int)一个二进制位叫做一个bit:11111111 8个bit叫作一个字节=1Byte。现实生活中一般十进制:0,1,2,3,4,5,6,7,8,9。八进制:0,1,2,3,4,5,6,7。1Byte=8bit(比特位)
2023-04-17 11:47:30
36
1
原创 2.第一个c语言的程序
int main()//这里的int与下面的return 0;正好形成呼应 int代表整数类型 main()是c语言代码中必须要存在的并且只能存在一个main函数 main()是程序的接口。#include<stdio.h>//这里的stdio std表示standard标准 i表示input输入 o表示output输出 h表示head头文件。//void main()//很久以前运用的写法。
2023-04-16 16:58:33
42
原创 1.初识c语言
例如 :1010 助记符 高级语言。为了方便语言的运用与发展,于是决定规范。所以便出现了c语言的国际标准:ANSIC。而人和计算机之间便要运用计算机语言 比如:c、c++、java...什么是c语言:计算机编程的一种语言,是高级语言一般用于底层开发。语言:人和人之间讨论聊天可能用 英语、中文...二进制-->汇编语言-->B语言-->c语言。还有其他很多的标准:比如C80,C90...而c语言发展同理也是:由低级到高级。计算机的发展历史:由低级到高级。
2023-04-16 16:45:57
79
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人