LINUX下VIM配置和插件
这是我在LINUX下的VIM配置文件和对应的一些插件,用于C,JAVA,HTML还是不错,
欢迎下载试用改造。
其中vimrc放在/etc下,.vimrc,.vim是家目录 vim-addon也放在家目录
操作系统简单二级文件系统
共两个不同设计例子,都含详细的文档资料。
任务2.设计一个简单的二级文件系统
设计要求:
在任一OS下,建立一个大文件,把它假象成硬盘,在其中实现一个简单的模拟文件系统。 编写一管理程序对此空间进行管理,要求:
1. 实现盘块管理
2. 实现文件的读写操作
3. 每组最多2人,小组内要有明确分工,课程设计报告中设计部分可以相同,个人实现部分不同
参考建议:
将模拟硬盘的文件空间划分为目录区,文件区;采用位示图进行空间管理,盘块的分配使用显示链接(FAT表)的方式。
设计技术参数(数据结构)参考:
#define MaxSize 100
#define Disk 512 //每个盘块大小为512bit
#define NumDisk 2048 //有2048个盘块,既可分配空间为 1M
/*************目录和文件的结构定义***********************/
struct DirectoryNode {
char name[9]; /*目录或文件的名字*/
int type; /*0代表目录,1代表普通文件*/
struct DirectoryNode *next; /*指向下一个兄弟结点的指针*/
struct DirectoryNode *preDirFile; /*指向父结点的指针*/
struct DirectoryNode *subFile; /*指向第一个子结点的指针*/
int size; /*如果是文件则表示文件的大小*/
int first; /*起始盘块号*/
int last; /*末尾盘块号*/
int order; /*备用*/
};
//连续分配
struct FileSys {
int VacTable[NumDisk]; //空闲表,0为空闲,1为被用
struct DirectoryNode root; //根目录
struct DirectoryNode Directory[NumDisk];
} *filesys;
typedef struct {
struct DirectoryNode *DirFile;
char name[9];
}DataType; //包含一个指向目录的指针和名字
typedef struct { //队列结构的实现
DataType data[MaxSize];
int front,rear; //分别表示队列的头结点和尾结点
}Tp;
void InitQueue(Tp *sq) //队列初始化
int EnAddQueue(Tp *sq,DataType data) //在队列中增加元素
DataType EnDelQueue(Tp *sq) //从队列中删除一个元素
int Empty(Tp *sq) //判断队列是否为空,返回0表示队列为空
①.Dir:显示目录内容命令,显示当前目录下的文件和子目录。
②.Md:创建目录操作。
③.Create:创建文件,在当前目录下创建一个文件。
④. all:显示从根目录开始的所有目录和文件及其层次结点。
⑤.Cd:改变目录。
⑥.Del:删除文件操作。
⑦. Rd:删除目录操作,删除当前目录下的子目录。
⑧. Ren:重命名函数
⑨. Exit:退出命令
操作系统进程调度算法设计
任务3. 进程调度算法的设计
设计要求:
①设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。
②建立进程就绪队列。对两种不同算法编制入链子程序。
③编制两种进程调度算法:1)优先数调度;2)循环轮转调度
设计技术参数参考:
①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
③在优先数算法中,优先数的值为50与运行时间的差值,即P_TIME-process->needtime。进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
④对于遇到优先数一致的情况,采用FIFO策略解决。
⑤每组最多2人,小组内要有明确分工,课程设计报告中设计部分可以相同,个人实现部分不同
其中包含3个例子,最后一个有详细的文档
KEIL+PROTEUS实现51汇编数字钟
数字钟,够熟悉了,不应多介绍吧。其中有PROTEUS的仿真,KEIL+PROTEUS联合实现程序,是用51汇编写的,有利于学习。程序当然可以继续优化
24AAXX系列和PCF8563的51汇编
IIC总线接口的实现,器件包括了24AAXX系列的EEPROM和时间芯片PCF8563的驱动51汇编程序。器件的资料文档用搜索找,没上传。其中当然少不了PROTEUS的仿真,KEIL+PROTEUS联合实现。而且实现了多个器件级连的功能,程序当然可以继续优化,有待你的实现!有问题可以联系,不过不保证回复及时。
DS18B20-温度传感器的51汇编程序
DS18B20温度传感器的51汇编程序,器件资料文档用搜索找,没上传。其中当然少不了PROTEUS的仿真,KEIL+PROTEUS联合实现。而且实现了多个器件级连的功能,程序当然可以继续优化的
二叉树中前后序层次的递归、非递归算法
20二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。(2 人)
要求:
树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
教学计划编制问题--课程管理
问题描述:
大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设 课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
基本要求:
(1) 输入参数包括:学期总数,课程总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
(2) 允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
(3) 若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。
[测试数据]
学期总数:6;学分上限:10;该专业共开设12门课,课程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。课程的先修关系如下表。
课程编号 课程名称 先决条件
C01 程序设计基础 无
C02 离散数学 C1
C03 数据结构 C1,C2
C04 汇编语言 C1
C05 语言的设计和分析 C3,C4
C06 计算机原理 C11
C07 编译原理 C5,C3
C08 操作系统 C3,C6
C09 高等数学 无
C10 线性代数 C9
C11 普通物理 C9
C12 数值分析 C9,C10,C1
实现提示:
可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程号与课程号之间的对应关系。
数据汇总--对大量数据进行汇总
问题描述:
在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。
假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。
实现要求:
⑴ 编写实现将数据记录插入到数据文件的最后的函数;
⑵ 编写以收款机为单位的数据分类处理函数。构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表;
⑶ 统计每台收款机的销售总额;
⑷ 编写以商品为单位的数据分类处理函数。构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表;
⑸ 以商品为单位,统计每种商品的销售总额。
⑹ 设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。
停车场管理问题,堆栈和队列应用
问题描述:利用堆栈和队列实现一个停车场管理系统
基本要求:
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一程序模拟该停车场的管理。车辆的信息包括:车牌号、汽车到达/离去标志、到达/离去时刻等。按照从终端读入的数据序列进行模拟管理。每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。车辆牌照为整型数据。进场或离场时间同样为整型数据。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
停车场管理系统主要实现以下几个功能:
(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。实现停车场的调度功能。
[测试数据]
(A,1,1)
(A,2,2)
(A,3,3)
(A,4,4)
(A,5,5)
(D,2,7)
(A,1,8)
(A,4,9)
班级花名册维护的有程序设计
一、系统的主要功能
要求能够增加、删除、修改学生的信息。程序能够读入一个班级花名册或是自建一个班级花名册。对一个班级的任何学生的修改操作最后都应该反映在保存在硬盘上的班级名册中。
二、题目分析
完成哈夫曼编/译码器程序
问题描述:
利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道 (即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编译码系统。
基本要求:
一个完整的系统应具有以下功能:
(l)I:初始化 (Initialization)。从终端读入字符集大小n,及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。
(2)C:编码 (Coding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
(3)D:编码 (Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。
(4)P:印代码文件 (Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。
(5)T:印哈夫曼树 (Tree printing)。将已在内存中的哈夫曼树以直观的方式 (树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
实现提示
根据题目要求把程序划成5个模块,设计成菜单方式,每次执行一个模块后返回菜单。
除了初始化(I)过程外,在每次执行时都经过一次读取磁盘文件数据。这是为了如果在程序执行后一直没有进行初始化(I)过程,为了能使后面的操作顺利进行,可以通过读取旧的数据来进行工作。比如:如果程序的工作需要的字符集和权值数据是固定的,只要在安装程序时进行一次初始(I)化操作就可以了。再在次运行程序时,不管进行那项操作都可以把需要的数据读入到内存。
算法分析
本程序主要用到了三个算法。
(1)哈夫曼编码 在初始化(I)的过程中间,要用输入的字符和权值建立哈夫曼树并求得哈夫曼编码。先将输入的字符和权值存放到一个结构体数组中,建立哈夫曼树,将计算所的哈夫曼编码存储到另一个结构体数组中。
(2)串的匹配 在编码(D)的过程中间,要对已经编码过的代码译码,可利用循环,将代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较,如果相等就回显并存入文件。
(3)二叉树的遍历 在印哈夫曼树(T)的中,因为哈夫曼树也是二叉树,所以就要利用二叉树的先序遍历将哈夫曼树输出。
[测试数据]
根据实验要求,在tobetrans.dat中输入"THIS PROGRAM IS MY FAVORITE",字符集和其频度如下:
字符 __ A B C D E F G H I J K L M
频度 186 64 23 22 32 103 21 15 47 57 1 5 32 20
字符 N O P Q R S T U V W X Y Z
频度 20 56 19 2 50 51 55 30 10 11 2 21 2
背包问题的求解,有二道题
问题描述:
假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , … , wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + … + wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:
(1,4,3,2)
(1,4,5)
(8,2)
(3,5,2)。
问题提示:
可利用回溯法的设计思想来解决背包问题。首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品"太大"不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明"刚刚"装入背包的那件物品"不合适",应将它取出"弃之一边",继续再从"它之后"的物品中选取,如此重复,直至求得满足条件的解,或者无解。
题目之二:
问题描述:
假设有n件物品,这些物品的重量分别是W1 , W2 , … , Wn,物品的价值分别是V1,V2, …,Vn。求从这n件物品中选取一部分物品的方案,使得所选中的物品的总重量不超过限定的重量W(W<∑Wi, i=1,2,┅,n),但所选中的物品价值之和为最大。
问题提示:
利用递归寻找物品的选择方案。假设前面已有了多种选择的方案,并保留了其中总价值最大的方案于数组option[]中,该方案的总价值保存于变量max_value中。当前正在考察新方案,其物品选择情况保存于数组eop[]中。假设当前方案已考虑了i-1件物品,现在要考虑第i件物品:当前方案已包含的物品的重量之和为tw;因此,若其余物品都选择是可能的话,本方案所能达到的总价值的期望值设为tv。引入tv是当一旦当前方案的总价值的期望值也小于前面方案的总价值max_value时,继续考察当前方案已无意义,应终止当前方案而去考察下一个方案。
第i件物品的选择有两种可能:
① 物品i被选择。这种可能性仅当包含它不会超过方案总重量的限制才是可行的。选中之后继续递归去考虑其余物品的选择;
② 物品i不被选择。这种可能性仅当不包含物品i也有可能找到价值更大的方案的情况。
字符串特殊排序,编一程序完成
问题描述:
编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子
中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度
相同。例如:
输入:
THE PRICE OFBREAD IS ¥1 25 PER POUND
输出:
ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU
并且要求只对A到Z的字母重新排列,其它字符保持原来的状态
八皇后问题,三种方法实现
问题描述: 在一个8×8的国际象棋棋盘上放置8个皇后,要求每个皇后两两之间不“冲突”,即没有一个皇后能“吃掉”任何其他一个皇后,简单的说就是没有任何两个皇后占据棋盘上的同一行或同一列或同一对角线,即在每一横列、竖列、斜列都只有一个皇后。
要求:用三种方法实现
字符串排列问题,不含重复
问题描述:
键盘输入一个仅由小写字母组成的字符串,输出以该串中任 取M个字母的所有排列及排列总数。
例如:输入字符串abcd,输入m=3
则输出为:abc,abd,acd,bcd,n=4
迷宫问题:m×n长方阵表示迷宫
问题描述:
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
实现要求:
⑴ 实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。
⑵ 编写递归形式的算法,求得迷宫中所有可能的通路;
⑶ 以方阵形式输出迷宫及其通路。
[测试数据]
迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口
实现提示:
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。
一元稀疏多项式的各种运算
问题描述:设用两个数组表示两个一元稀疏多项式A、B,实现两个一元稀疏多项式的处理。
实现要求:
⑴ 输入并建立多项式;
⑵ 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列;
⑶ 多项式A和B相加,建立多项式A+B,输出相加的多项式;
⑷ 多项式A和B相减,建立多项式A-B,输出相减的多项式;
⑸ 设计一个菜单,上述操作要求的基本功能。
测试数据:
(1) (2x+5x8-3.1x11)+(7-5x8+11x9)
(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)
(3)(x+x2+x3)+0
(4)(x+x3)-(-x-x-3)
图的平均路径长度和网络直径
问题描述:平均路径长度是网络中另一个重要的特征度量,他是网络中所有节点对之间的平均最短距离。这里节点间的距离指的是从一个节点要经历的边的最小数目,其中所有节点之间的最大距离称为网络的直径。平均路径长度和直径衡量的是网络的传输性能与效率。平均路径长度的公式为
,其中dij表示点i和j之间的最短距离(若dij不存在时,dij就不能加入,且分母要相应减1)
要求:输入邻接矩阵表示的图,计算其平均路径长度
关键路径问题:设计程序求工程关键活动
问题描述:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。
基本要求:
(1)对一个描述工程的AOE网,应判断其是否能够顺利进行。
(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。