C++读取磁盘文件
0.前言
简单介绍一下C++读取文件的基本操作。
关键技术:
freopen() 文件的打开函数 FILE *fp fp=fopen(文件名,使用文件方式) 例如: fp=fopen("123.txt","r");
它表示要打开名称为123的文本文档,使用文件方式为“只读”,fopen()函数带回指向123.txt文件的指针并赋给fp,也就是说fp指向123.txt文件。
文件使用方式 | 含义 |
“r”(只读) | 打开一个文本文件,只允许读数据 |
“w”(只写) | 打开或建立一个文本文件,只允许写数据 |
“a”(追加) | 打开一个文本文件,并在文件末尾写数据 |
“fb”(只读) | 打开一个二进制文件,只允许读数据 |
“wb”(只写) | 打开或建立一个二进制文件,只允许写数据 |
“ab”(追加) | 打开一个二进制文件,并在文件末尾写数据 |
“r+”(读写) | 打开一个文本文件,允许读和写 |
“w+”(读写) | 打开或建立一个文本,允许读写 |
“a+”(读写) | 打开一个文件文件,允许读,或在文件末尾追加数据 |
“rb+”(读写) | 打开一个二进制文件,允许读和写 |
“wb+”(读写) | 打开或建立一个二进制文件,允许读和写 |
“ab+”(读写) | 打开一个二进制文件,允许读,或在文件末尾追加数据 |
1.fclose() 文件的关闭函数 fclose(文件指针) 作用是通过指针将该文件 关闭 2.fgetc() 函数 ch=fgetc(fp) 该函数的作用是从指定的文件(fp指向的文件)读入一个字符赋给ch。注意该文件必须是以读或读写方式打开的。
C++链表结构——单链表
C++中箭头指针的含义及用法
树的遍历
在应用树结构解决问题时,往往要求按照某种此项获得树中全部结点的信息,这种操作叫做树的遍历。遍历的方法有很多种。常用的有:
A. 先序遍历:先访问根结点,再从左到右按照先序思想遍历各子树。
B. 后序遍历:先从左到右遍历各个子树,再访问根结点。
C.层次遍历:按层次从小到大逐个访问,同一层次按照从左到右的次序。
D.叶结点遍历:有时把所有的数据信息都存放叶结点中,而其余结点都是用来表示数据之间的某种分支或层次关系,这种情况就用这种方法。
树的存储结构
【题解】连通块
【题解】车厢调度
【题目描述】
有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n<=1000)。分别按照顺序编号为1,2,3,...n。假定在进入车站前,每节车厢之间都不是连着的,并且它们可以自行移动到B处的铁轨上。另外假定车站C可以停放任意多节车厢。但是一旦进入车站C,它就不能再回到A方向的铁轨上了,并且一旦当它进入B方向的铁轨,它就不能在回到车站C。车厢调度的工作人员需要知道能否使它以a1,a2,...,an的顺序从B方向驶出,请来判断能否得到指定的车厢顺序。
【输入描述】
第一行为一个整数n,其中n<=1000,表示有n节车厢,第二行为n个数字,表示指定的车厢顺序。
【输出描述】
如果可以得到指定的车厢顺序,则输出一个字符串“YES
”,否则输出“NO
”(注意要大写,不包含引号)
【样例输入】
5 5 4 3 2 1
【样例输出】
YES
【提示】
解析:观察发现,整个调度过程其实是在模拟入栈出栈的过程,而这个过程中,我们可以分成三种状态:栈前、栈中、栈后。我们可以发现,当某个数字出栈了,说明比它小的数字要么已经出栈了,要么还在栈里,不能是入栈前状态,并且在栈中的顺序是从大到小的(从栈顶往栈底看),比如出5,那么1,2,3,4要么已经在5之前出了,要么还在栈中(假如1,3,4在栈中,从栈顶往栈底看依次为4,3,1),不能是入栈前的状态。如果某个数字要出栈,那么当前在栈中的数字都必须小于它,否则就与栈的性质矛盾,不合法,于是我们可以这样解决:
从第一个数字开始扫描,a[i]表示当前出栈的数字,如果有比a[i]大的数字还在栈中,那么就产生矛盾,输出“NO”;否则,标记当前数字a[i]为栈后状态,那么[1, a[i]-1]这些数字如果还没出栈,标记为栈中状态。具体我们可以用0表示为确定状态,1表示栈中状态,2表示栈后状态。
【题解】均分纸牌
【题目描述】
有n堆纸牌,编号分别为 1,2,…, n。每堆上有若干张,但纸牌总数必为n的倍数。可以在任一堆上取若干张纸牌,然后移动。
移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为n-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如 n=4,4堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6
移动3次可达到目的:
从 ③ 取4张牌放到④(9 8 13 10)->从③取3张牌放到 ②(9 11 10 10)-> 从②取1张牌放到①(10 10 10 10)。
【输入描述】
n(n 堆纸牌,1 ≤ n ≤ 100)
a1 a2 … an (n 堆纸牌,每堆纸牌初始数,l≤ ai ≤10000)
【输出描述】
一个正整数,即最少需要的组数。所有堆均达到相等时的最少移动次数。
【样例输入】
4 9 8 17 6
【样例输出】
3