模拟Linux文件系统。
在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。
2.编写一管理程序对此空间进行管理,以模拟Linux文件系统,具体要求如下:(1)要求盘块大小1k正规文件(2)i结点文件类型目录文件(共1byte)块设备管道文件物理地址(索引表)共有13个表项,每表项2byte文件长度4byte。
联结计数1byte(3)0号块超级块栈长度50空闲盘块的管理:成组链接(UNIX)位示图法(Linux)(4)每建一个目录,分配4个物理块文件名14byte(5)目录项信息i结点号2byte(6)结构:0#:超级块1#-20#号为i结点区20#-30#号为根目录区3.该管理程序的功能要求如下:(1)能够显示整个系统信息,源文件可以进行读写保护。
目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。
(2)改变目录:改变当前工作目录,目录不存在时给出出错信息。
(3)显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。
(4)创建目录:在指定路径或当前路径下创建指定目录。
重名时给出错信息。
(5)删除目录:删除指定目录下所有文件和子目录。
要删目录不空时,要给出提示是否要删除。
(6)建立文件(需给出文件名,文件长度)。
(7)打开文件(显示文件所占的盘块)。
(8)删除文件:删除指定文件,不存在时给出出错信息。
4.程序的总体流程为:(1)初始化文件目录;
(2)输出提示符,等待接受命令,分析键入的命令;
(3)对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。
2024/8/13 8:58:42 1.74MB linux 目录 文件 创建
1
设二叉排序树的二叉链表存储结构的类型定义如下:typedefstructnode{intdata;//用整数表示一个结点的名structnode*LChild,*RChild;//左右指针域}BSTNode,*BSTree;设计算法并编写程序求解以下几个问题。
8121410731562415119131613(1)键盘输入一个元素序列创建一棵二叉排序树,输出该二叉排序树的中序遍历序列;
例如,若输入45,24,55,12,37,53,60,23,40,70则创建的二叉排序树为:输出结果为:12232437404553556070(2)在(1)中所得的二叉排序树中插入一个值为58的结点,再输出它的中序遍历序列,输出结果为:1223243740455355586070(3)在(1)中所得的二叉排序树中删除值为45的结点,再输出它的中序遍历序列,输出结果为:12232437405355586070(4)利用(1)中所得的二叉排序树的所有叶子结点构造一个带头结点的单链表L。
要求不能破坏这棵二叉排序树。
所得的单链表L如下。
输出该链表各结点的值,输出结果为:23405370(5)设计算法将(1)中所得的二叉排序树的左右子树进行交换,由于二叉树是一种递归定义,所以子树的左右两棵子树也要相交换,依此类推。
最后输出所得到的二叉树的中序遍历序列。
例如,经过上述操作后,(1)中所得的二叉排序树变为如下形式。
输出该二叉树的中序序列,结果为:70605553454037242312(6)设计算法统计并输出(1)中所得的二叉排序树中只有一个孩子结点的结点个数。
输出结果为:3(7)在(1)中所得的二叉排序树中,设计算法并编写程序输出结点40的所有祖先结点。
输出结果为:452437
2024/8/12 15:36:41 39KB 数据结构 C C++
1
项目描述: 主函数分为两部分:1.登录函数 2.主菜单功能函数 一、登录函数运用到坐标读取,bmp图片显示,文件读写等操作,其中,注册用户用到了文件的写入, 把注册的信息写入到用户信息文本。
登录时,用到文件的读,把存放用户信息的文本内容读取出来并存放在单向链表中, 登录时,通过字符串比较函数匹配账号密码时候正确 二、是主菜单功能函数,该函数主要有四部分功能函数组成,分别为音乐播放函数,视频播放函数,电子相册,2048小游戏函数组成 音乐播放函数:主要利用递归读取目录把读到的.mp3后缀名的文件的路径名用双向循环链表存放起来,利用madplay相关命令进行播放,暂停等操作。
视频播放函数:主要利用递归读取目录把读到的.mp4或者.avi后缀名的文件的路径名用双向循环链表存放起来,利用mplayer相关命令进行播放,暂停等操作。
电子相册:主要利用归读取目录把读到的.bmp后缀名的文件的路径名用双向循环链表存放起来,利用读取坐标判断点击或者滑动的相关操作进行图片显示 其中,进入电子相册,默认路径下的所有图片均按一定比例缩放在一定区域浏览,可通过滑动翻至另外预览图片页, 也可通过点击预览图片进入原始比例大小查看,在原始比例大小查看期间,可点击放大或者缩小,也可以通过滑动显示下一张图片的原始比例大小的查看。
在图片显示过程中,图片显示效果主要是由中间向两边扩散。
不足之处:图片缩放利用的是直接改变前54字节头结点的信息,当图片宽度w*3%4不等于0时 缩放图片变形(原因:bmp图片特点导致,利用该方法无法解决该缺点) 2048小游戏:利用二维数组表示每行每列的数字,通过方向键或者左右上下滑动来确定数字要移动的方向,通过左右移,上下移的函数算法,进行相应的逻辑处理 最后以图片显示和打印的结果显示。
在每一次改变后,把改变后的二维数组,以及剩余的空白格子数存放在栈式链中,利用栈的后进先出的逻辑实现 返回上一步的功能
2024/8/8 4:46:45 33KB 文件io 音视频 相册 2048小游戏
1
1本程序在vc++6.0编译通过并能正常运行。
2主界面程序已经尽量做到操作简便了,用户只需要根据提示一步步进行操作就行了。
六思考和总结:这个课程设计的各个基本操作大部分都在我的综合性实验中实现了,所以做这个主要攻克插入和删除这两个算法!其中插入在书本上已经有了,其中的右平衡算法虽然没有给出,但通过给出的左平衡算法很容易就可以写出右平衡算法。
所以最终的点就在于删除算法的实现!做的过程中对插入算法进行了非常非常多次的尝试!花了非常多的时间,这其中很多时候是在对程序进行单步调试,运用了VC6。
0的众多良好工具,也学到了很多它的许多好的调试手段。
其中删除算法中最难想到的一点是:在用叶子结点代替要删除的非叶子结点后,应该递归的运用删除算法去删除叶子结点!这就是整个算法的核心,其中很强烈得体会到的递归的强大,递归的最高境界(我暂时能看到的境界)!其它的都没什么了。
选做的那两个算法很容易实现的:1合并两棵平衡二叉排序树:只需遍历其中的一棵,将它的每一个元素插入到另一棵即可。
2拆分两棵平衡二叉排序树:只需以根结点为中心,左子树独立为一棵,右子树独立为一棵,最后将根插入到左子树或右子树即可。
BSTreeEmpty(BSTreeT)初始条件:平衡二叉排序树存在。
操作结果:若T为空平衡二叉排序树,则返回TRUE,否则FALSE.BSTreeDepth(BSTreeT)初始条件:平衡二叉排序树存在。
操作结果:返回T的深度。
LeafNum(BSTreeT)求叶子结点数,非递归中序遍历NodeNum(BSTreeT)求结点数,非递归中序遍历DestoryBSTree(BSTree*T)后序遍历销毁平衡二叉排序树TR_Rotate(BSTree*p)对以*p为根的平衡二叉排序树作右旋处理,处理之后p指向新的树根结点即旋转处理之前的左子树的根结点L_Rotate(BSTree*p)对以*p为根的平衡二叉排序树作左旋处理,处理之后p指向新的树根结点,即旋转处理之前的右子树的根结点LeftBalance(BSTree*T)对以指针T所指结点为根的平衡二叉排序树作左平衡旋转处理,本算法结束时,指针T指向新的根结点RightBalance(BSTree*T)对以指针T所指结点为根的平衡二叉排序树作右平衡旋转处理,本算法结束时,指针T指向新的根结点Insert_AVL(BSTree*T,TElemTypee,int*taller)若在平衡的二叉排序树T中不存在和e有相同的关键字的结点,则插入一个数据元素为e的新结点,并返回OK,否则返回ERROR.若因插入而使二叉排序树失去平衡,则作平衡旋转处理布尔变量taller反映T长高与否InOrderTraverse(BSTreeT)递归中序遍历输出平衡二叉排序树SearchBST(BSTreeT,TElemTypee,BSTree*f,BSTree*p)在根指针T所指的平衡二叉排序树中递归的查找其元素值等于e的数据元素,若查找成功,则指针p指向该数据元素结点,并返回TRUE,否则指针p指向查找路径上访问的最后一个结点并返回FALSE,指针f指向T的双亲,其初始调用值为NULLDelete_AVL(BSTree*T,TElemTypee,int*shorter)在平衡二叉排序树中删除元素值为e的结点,成功返回OK,失败返回ERRORPrintBSTree_GList(BSTreeT)以广义表形式打印出来PrintBSTree_AoList(BSTreeT,intlength)以凹入表形式打印,length初始值为0Combine_Two_AVL(BSTree*T1,BSTreeT2)合并两棵平衡二叉排序树Split_AVL(BSTreeT,BSTree*T1,BSTree*T2)拆分两棵平衡二叉树}(2)存储结构的定义:typedefstructBSTNode{ TElemTypedata; intbf;//结点的平衡因子 structBSTNode*lchild,*rchild;//左.右孩子指针}BSTNode,*BSTree;
1
数据结构小代码,改自《数据结构与算法分析C++版》源代码1.编写使用freelist的带头、尾结点的双向链表类的定义,实现双向链表的基本操作。
2.利用双向链表实现2个一元稀疏多项式的加法运算,运算结果得到的链表要求按照指数升序有序,并遍历输出指数升序、指数降序的多项式。
2024/6/12 2:41:24 1.19MB datastructur
1
数塔问题:设有一个三角形数塔(如下图所示),求自塔顶至塔底的一条路径,使得该路径上结点的值的总和最大。
设计动态规划算法,并分析时间复杂性,C程序求自塔顶至塔底的一条路径,使得该路径上结点的值的总和最大。
设计动态规划算法
1
很多涉及图上操作的算法都是以图的遍历操作为基础的。
试写一个程序,演示无向图的遍历操作。
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。
以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。
[测试数据]由学生依据软件工程的测试技术自己确定。
注意测试边界数据,如单个结点。
[实现提示]设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,…,n)。
通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。
注意,生成树的边是有向边,端点顺序不能颠倒。
2024/5/26 13:25:36 120KB BFS DFS
1
用带表头的链表存放输入的数据,每读入一个数,按升序顺序插入到链表中,链表中允许两个结点有相同值。
链表的头结点存放链表后面的结点个数,初始化时就生成头结点(初值为0)。
链表翻转是把数据逆序(变成降序),注意,头结点不动。
翻转后要再翻转一次,恢复升序后才能插入新元素,否则会出错。
2024/5/24 22:27:56 43KB 链表
1
霍夫曼编码,对输入的字符集和各个字符对应的权值,例如A={a,b,c,d,e,f,g,h},各个字符对应的权值为{5,29,7,8,14,23,3,11},求出每个字符的霍夫曼编码。
【输入形式】输入若干个字符(1<=n<=26),其权值为int型。
输入数据的第一行的整数n,表示字符数;
接下来的n行是字符集,一行一个字符;
最后一行是各字符的权值,以空格分隔。
【输出形式】每个字符(节点)的霍夫曼编码。
参见样例输出。
【样例输入】4abcd13722【样例输出】a:000b:001c:01  d:1【样例说明】提示:1、将最小两个子树合并过程中一定要从前向后去查找两个最小子树,最小子树作为新结点的左子树,次小子树作为新结点的右子树,编码过程中左子树定义为0,右子树定义为12、另外:一般原则要求: 若有重复权值结点,原来森林中的结点优先选择(即深度小的结点优先,以确保最终总树深较浅并相对平衡)。
新生成的权值和的结点后用。
2024/3/30 12:22:16 4KB 二又树应用 霍夫曼编码
1
使用sparkgraphx实现网络结点n度关系计算
2024/3/27 7:01:01 6KB spark graphx 图计算
1
共 143 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡