数据结构作业笔记1.基于顺序存储结构的线性表实现1.1 思路:因为是顺序存储结构的线性表,就要考虑用数组实现,而平时的数组静态的增删麻烦,我的思路是动态分配一个数组来做。
1.2各部分的功能实现:头文件:
1234#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <string.h>
主体由数组组成的线性表的构成:
123456typedef struct{ int *data;//用于存储指向数据的指针 int length;//数组的长度,跟随后面的增删改操作一起增减 bool state;//用来标记该数组是否被销毁} list;
因为要弄99个线性表,所以我选择开100个list指针变量,用来存储每个线性表数组的首地址
1list*L[100];
初始化表:
1234567void InitList(list *L){ L->data = (int *)malloc(sizeof(in ...
L1部分1.打印沙漏找规律,记得观察每行的规律,然后就是等差求和和公式的运用
L1-002 打印沙漏 - 团体程序设计天梯赛-练习集
2.个位数统计哈希表通过数组存储每个元素出现的次数
L1-003 个位数统计 - 团体程序设计天梯赛-练习集
3.计算摄氏温度注意输出格式
L1-004 计算摄氏温度 - 团体程序设计天梯赛-练习集
4.考试座位号用结构体做,不超时,但是开字符串数组的时候一定要把末尾的’\0’终止符算进去即16+1=17
L1-005 考试座位号 - 团体程序设计天梯赛-练习集
5.念数字二维字符数组,然后字符和数字的转换,负号特判
L1-007 念数字 - 团体程序设计天梯赛-练习集
6.求整数段和这道题主要是特判,要注意换行,看看最后一行是5个刚好还是不满5个,然后就是5个字符的格式,用%5d填充
L1-008 求整数段和 - 团体程序设计天梯赛-练习集
7.A-B这道题还是用那种类似哈希表的把b串的ascll码存储起来,然后对应删除a串的值即可
需要注意的是cin>>读取字符串遇到空格会停下来,得用**cin.getline(a,n);**a ...
刷题1234561.注意循环中i,j的使用有没有错误2.注意dfs中标记数组的清空3.dfs参数问题,遍历的起始值要注意4.数组定义的时候要检查[][],而不是[,]5.在有些题目中即使它是数字1,0,但是他说的是字符输入也要改成字符,不然可能因为间隔问题输入失败6.每次每组搜索前一定要重置标记数组memset(vis, 0, sizeof(vis));
1.高精度问题0R 格式 - 蓝桥云课
1234567891011121314151617181920212223//在一些计算中,题目可能会给出一串远远超出我们运算的数据类型的范围的数据//对于大浮点数,先把其字符转整型,然后删小数点,转换为一个大整数之间的运算//注意,前提还是先把字符数组翻转一下,再处理vector<int>a;//这里的a默认一个大整数做演示int t=0;//进位数for(int i=0;i<len;++i){ a[i]=2*a[i]+t; if(a[i]>=10){ t=a[i]/10; a[i]%=10; } else{ t=0 ...
湖南工业大学刷题笔记2.1.81.最大公约数:
1234567891011//辗转相除法int s(int a,int b){ while(a!=0){ int c=a%b; b=a; a=c; } return b;}//最小公倍数:int min=(a*b)/s(a,b);
3.1.1,21.闰年判断条件:
1//年份%400=0 或者 年份%4=0并且年份%100!=0
2.冒泡排序:
1234567891011int s[n];for(int i=0;i<n-1;++i){ for(int j=0;j<n-1-i;++j){ if(s[j]<s[j+1]){ int tmp; tmp=s[j]; s[j]=s[j+1]; s[j+1]=tmp; } }}
4.2.51.寻找完数:
范围对半除找
5.1.5*1.亲密数问题:
12345678//求一个数的约数之和void calculateDivisors() { ...
1.基本数据处理1.在 printf(“”)输出时,如果有**==/==,==”==,==?==**输出时,前面要加上转义字符\才能正确输出。2.int 的数做除法运算时,一般都往 0 取整(向下),如果要向上取整,可以自己做一下 if 判断(要注意什么时候刚好除完,什么时候是小数结果的情况)3.int-%d ,double-%lf ,long long-%lld,float-%f,unsigned long long-%llu==(这个比 longlong 的范围还要大)==4.数据类型的转换1.赋值时的类型转换:赋值号**==右边表达式的类型==**会自动转换为赋值号==左边变量类型==2.算术转换:如果在运算时有多个数据类型,那么他会自动**==由低往高==**转换
如:算术表达式中** ...
2.结构化编程1.scanf(“”)中不能有任何符号,按照输入格式来,严格。2.看因数3.char *fgets(char *str, int n, FILE *stream);(有时候字符串数组最后还有个结束符’\0’)fgets() 是 C 标准库中的一个函数,用于从文件或标准输入中读取一行字符串,直到遇到换行符、文件结束符(EOF),或者达到最大读取字符数为止。它的定义在 <stdio.h> 中。
这个输入语句可以输入包括空格的,但是scanf不行,scanf遇到空格会停下来
一般使用stream是stdin
参数说明
**str**:用于存储读取内容的字符数组的指针。
**n**:要读取的最大字符数(包括字符串结尾的 \0)。
**stream**:输入流,可以是文件指针(如 stdin)。
返回值
如果成功,返回 str 的地址。
如果遇到文件结束(EOF)或发生错误,返回 NULL。
4.矩形嵌套:要判断三个矩形是否能够完整嵌套,需要满足以下条件:
定义嵌套规则: 一个矩形 AAA 可以嵌套在另一个矩形 BBB 中,当且仅当:
min(A长,A宽)> ...
7.I/O和文件操作1.文件:读取文件:FILE *filea=fopen(“ “)(filea是给这个文件定义的名字,相当于变量名)
关闭文件(最后):fclose(“filea”)
1. 文件的打开 (fopen)fopen 是用来打开一个文件并返回一个文件指针的函数。文件指针是指向文件的一个指针,用来在文件中进行读写操作。
函数原型:12345c复制编辑FILE *fopen(const char *filename, const char *mode);
filename: 要打开的文件名。
mode: 打开文件的模式,决定了你如何读取、写入或修改该文件。
常见的打开模式:
"r": 只读模式。文件必须存在,文件指针指向文件开头。
"w": 只写模式。如果文件存在,文件内容会被清空;如果文件不存在,会创建新文件。
"a": 追加模式。如果文件存在,数据会被写入文件末尾;如果文件不存在,会创建新文件。
"r+": 读写模式。文件必须存在,文件指针指向文件开头。
"w ...
3.函数及应用1.自然常数e(math.h)exp(1)
2.三次方根(math.h)cbrt(x)
3.全错位排序公式:全错位排序(Derangement) 是指一个排列中,所有元素的位置都不与其原位置相同的排列方式。换句话说,对于一个有 n 个元素的排列,要求每个元素都不出现在其原本的位置上。
全错位排序的递推公式对于给定的 n,全错位排序的数目可以通过递推公式来计算,公式为:$$D_n = (n - 1) \times (D_{n-1} + D_{n-2})$$其中:
D_n 表示有 n 个元素的全错位排列数。
D_0 = 1,即零个元素的全错位排列数为 1(通常定义为1)。
D_1 = 0,即一个元素没有全错位排列。
4.while中用于没给出具体循环个数但要读取数的情况:~scanf("%d", &n) 是一个常见的用法,通常用于读取整数输入直到输入结束。让我们详细分析一下这个表达式的含义。
scanf 的返回值scanf 函数用于从标准输入读取数据,并将读取到的数据存储到指定的变量中。scanf 的返回值是成功读取的输入项的数量。例 ...
北航刷题知识点整集2025.2.2:1.printf的转义字符:在输出一些字符的时候,某些字符是系统默认识别的,需要在前面加上特定的字符才能输出
如:
\ “ ? 这些前面要加上\才能正常输出
**%的前面要再加一个%**才能输出
2.int类型的数做除法运算时的取整:一般都是向下取整,即向0取整
如果想要向上取整,通常用的公式是(a+b-1)/b
1//示例:(5 + 3 -1)/3 = 7/3=2(5/3向上取整为2)
要注意负数的情况
3.数据类型和格式符:1.赋值时如果等号两端是不同的数据类型,那么右边的数据类型在运算结束时会自动向左边的数据类型转换
2.如果在运算的过程中有多个数据类型,它会由下图中的顺序由低往高进行转换:
即先是整数,由短到长,长到极限,再是浮点,浮点之间,单独做比
如:算术表达式中普通整数( int )和无符号整数( unsigned )混合使用,则普通整数将自动转换成无符号整数
隐式转换陷阱:如unsigned int与int运算时,负数会转为大正数。
123int a = -1;unsigned int b = 1;if (a ...
洛谷笔记21.邻接表有关树类型的问题基本上都可以用邻接表来表示
当出现图的连续关系的时候,可以用一个数组adj[i] [i+1]来表示节点i的下面有的根节点
123int adj[i+1][i]//表示i+1(i是从0开始)节点下面的某些节点int adj_size[i+1]//表示i+1节点下方有多少个节点,往往用于上方的遍历,基本同时出现
12345678910111213141516171819202122232425//比如:/*输入:最大数为8,9行1 21 31 42 52 63 74 74 87 8*/int adj[9][8];int adj_size[9];for(int i=1;i<=9;++i){ int x,y; scanf("%d,%d",&x,&y); adj[x][adj_size[x]++]=y;//这样就构造出来了一个邻接表}//注意:这里还要后续对每个节点进行排序for(int i=1;i<=n;++i){ qsort(adj[i],adj ...