- 博客(65)
- 资源 (1)
- 收藏
- 关注
原创 计算机内存
内存一般用于存放程序指令和运算数据,帮助CPU与硬盘等外部存储设备进行数据的交换。内存智能临时存放程序的指令与数据。(当电脑关机之后内存中的数据就会消失)。每个字节都有唯一的地址,这些地址被称为内存地址,通过内存地址可以访问内存中的每一个字节。使用windows中的debug程序,可以模拟并查看CPU、寄存器、内存当中的相关数据。一个二进制数代表一个比特位(bit),一个字节(B)等于八个比特位。计算机中的程序指令或操作数据都是以二进制的在内存中存储与计算。在计算机当中所有的程序的运行都在内存中进行。
2024-10-29 13:21:00 109
原创 基本电子元件及作用
1.电阻器电流限制元件,阻值不能改变的称为固定电阻器。阻值可变的称为电位器或可变电阻器。用字母R来表示,单位为欧姆Ω。实际器件如灯泡,电热丝,电阻器等均可表示为电阻器元件。电阻与电压电流的关系公式:U=RI电阻常见分为插接式电阻和贴片式电阻,不同的颜色和数字有不同的读数方式。又叫电容器,是指容纳电荷本领的物理量。电容分为有极性和无极性。电容一般用通常用“C”表示。
2024-10-27 17:18:54 878
原创 如何用C语言读取不定长字符串输入
请注意,使用动态内存分配需要谨慎考虑,必须在不再需要内存时释放它,以避免内存泄露。另外,在分配和重新分配内存时,还需要检查分配是否成功,以避免分配失败导致程序崩溃的情况。为了更好地处理这种情况,我们可以使用动态内存分配来分配足够的内存以存储任意长度的字符串,但这超出了本回答的范围。在读取过程中,我们还需要检查字符数是否超过了数组的长度,以防止内存溢出。要解决这个问题,我们可以使用动态内存分配来避免输入字符串长度超过预设的字符数组大小。请注意,以上代码存在一个潜在的问题,即如果用户输入的字符串长度超过了。
2023-03-30 23:23:24 5387
原创 linux虚拟机 Ubuntu 安装方法
找一个磁盘剩余空间大一点的,最好是50G以上,找到磁盘之后先在这个磁盘里建立一个文件夹取名Ubuntu20.04,然后进入到此文件夹里,建立两个文件夹,VMware Workstation 是一款虚拟 PC 软件,利用 VMware 工作站,可在现有操作系统上。找到磁盘之后先在这个磁盘里建立一个安装虚拟机的文件加,取名为VMware16。找一个磁盘剩余空间大一点的,最好是50G以上,因为你学习的三个阶段都。选择镜像位置的其中的一个网站进行下载。一个取名DATA,一个取名VM。选择中国的下载网站,随便一个。
2023-03-15 20:24:44 776
原创 指针(基础+进阶)
根据上面代码我们发现,其实&arr和arr一样,虽然值是一样的,但&arr表示的是数组的地址,而不是首元素的地址。把字符串首字符的地址存放到指针变量p中,通过指针变量就可以访问整个字符串的字符。数组的地址+1,跳过整个数组的大小,所以&arr+1相对于&arr的差值是40。arr存放字符串首元素地址指针p也。指针变量也是变量,是变量就有地址,指针变量地址存放的变量就是二级指针。指针有类型,指针的类型决定了指针的步长,指针解引用操作时的权限。既然数组指针是指向数组的指针,那么存放的应该是数组的地址。
2023-03-15 13:52:53 267
原创 数据的存储
算术运算总是以至少以缺省整型类型的精度来进行的,为了获取这种精度,表达式中的字符和短整型操作数在使用之前转换为普通整型,这种转换称为整型提升。有符号的整型提升按照变量数据类型的符号位来提升;大端字节存储模式,数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。三种表示方法均有符号位、数值位两部分,符号位用0表示”正“,用1表示负。整型在计算机中占用四个字节,整型分为无符号整型和有符号整型。内存中有编号,编号小的是低地址,编号大的是高地址。整型提升分为有符号的整型提升和无符号的整型提升。
2023-03-11 10:54:56 391
原创 Linux操作系统常用指令
终端是你和计算机进行交流的平台,你可以在终端上输入指令来控制计算机。chmod 权限(4,2,1的组合) 文件/目录。注意:删除目录必须添加-r,文件可加,可不加。功能:在不用打开文件的同时,可以直接查看里边的内容。cp 你要复制的文件 你要复制的位置。第8-10位代表其他用户对文件所拥有的权限。第2-4位表示当前拥有者对文件所有的权限。第5-7位代表同组用户对文件所拥有的权限。mv 文件 你要移动的位置。功能:移动或者是修改文件的名字。功能:修改文件或者是目录的权限。
2023-03-09 15:32:01 690
原创 假设二叉树采用二叉链表存储结构,设计一个用非递归的算法求二叉树高度
非递归算法思想:采用层次遍历算法的思想用high来记录树的高度,初始值设为0,设置一个last指针指向最右边的结点,当front指向last时high+1。让last指向下一层最右边的结点,直到遍历完成,high的值即为树的高度代码:int SER(BiTree T){ if(T==NULL)//如果树为空 return 0;//返回树高为0 BiTree Q[Maxsize];//初始化一个队列 int high=0,last=0/
2022-12-06 20:03:01 2696 6
原创 试给出二叉树从下至上,从右至左的遍历算法
算法思想:根据层次遍历的顺序可得到与该问题相反的次序,则可利用栈先进后出的性质,按层次遍历输出各结点并压入栈中,出栈时访问结点即可得到从下至上从右边到左边的遍历算法代码:void LeverOrder(BiTree T){BiTree p;//定义一个指向二叉树的指针InitQueue(Q);//初始化一个队列InitStack(S);//初始化一个栈EnQueue(Q,T);//根结点入队while(!IsEmpty Q){//如果队列非空 DeQueue(Q,p);//队头结点出队
2022-12-06 19:59:10 959 1
原创 二叉树层序遍历算法
算法思想:借助一个队列,将二叉树根结点入队然后出队访问根结点,若果它有左子树,则左子树的根结点入队,若它有右子树则右子树的根结点入队。依次循环直到队列为空时跳出循环。代码实现:void LeverOrder(BiTree T){InitQueue(Q);//初始化辅助队列BiTree p;//定义一个指向二叉树的指针EnQueue(Q,s);//根结点入队while(!IsEmpty Q){//如果队列非空DeQueue(S,p);//队头结点出队if(p->lchild!=NULL)//如果左子树不空
2022-12-06 19:45:24 660
原创 后续遍历非递归算法
后续遍历非递归算法算法思想:在后续遍历中结点要两次入栈,并且两次出栈。第一次出栈:只遍历完左子树该结点并不出栈。第二次出栈:遍历完右子树,将该结点出栈并访问它。(要保持左右根的顺序,所以要入栈两次,出栈两次)。因此为了区分同一个结点是第几次出栈,设置标志位flag;(1表示第一次出栈,2表示第二次出栈)struct typu{ BiTNode *r; int flag;//记录第一次出栈还是第二次出栈}void PostOrder(BiTree T){InitStack(S);/
2022-12-04 21:00:27 668 1
原创 中序遍历迭代算法(非递归算法)
中序遍历迭代算法(非递归算法)关键:在二叉树的中序遍历中,访问结点的操作发生在左子树遍历完毕,准备遍历右子树时。所以在遇到某结点时并不能立即访问它,而是将它压入到栈中,等到左子树遍历完之后,再重栈中弹出并访问。算法思想:遍历左子树,依次进栈(此时不访问),遍历完左子树之后弹出栈顶结点,访问栈顶结点,遍历右子树,依次循环操作直到栈为空和指针为空。代码:whille(p!=NULL||S.isEmpty){ //当p为空并且,S为空时跳出循环if(p!=NULL){ push(S,p); //
2022-12-04 19:59:57 563
原创 树的递归算法与非递归(迭代)的转化重点理解代码(上篇)
算法思想:比较i和j,不断的将较大的取一半,直到i=j找到了最近公共祖先结点。Elemtype Isert(SqTree T,int i,int j){if(T[i]!=NULL&&T[j]!=NULL){ while(i!=j){ if(i>j) i=i/2; else j=j/2;}} return(i);}树的结构体定义:t
2022-12-04 19:33:58 470 2
原创 操作系统P,V操作大总结(包含例题)上篇
桌子上有一个盘子,一次只能放一个水果,爸爸往盘子中放苹果,妈妈往盘子中放橘子。一组生产者和消费者共享大小为n的缓冲区,只有缓冲区不空时消费者才能从中取出产品,只有缓冲区不满时生产者才能往缓冲区放入产品。问题分析:一共四个进程,爸爸,妈妈,儿子,女儿,爸爸往盘子中放苹果,妈妈往盘子中放橘子,儿子从盘子中拿橘子,女儿从盘子中拿苹果。引言:P,V操作必须成对出现,P可简单的理解为消耗一种资源,V可简单的理解为增加一种资源。//增加缓冲区一个产品的数量。//增加空闲缓冲区的数量。//消耗一个空闲缓冲区。
2022-12-01 20:27:48 1373
原创 2009(408)数据结构有关链表代码题
第二种(优秀算法):定义两个指针变量p和q,初始时均指向头结点的下一个结点,p指针先移动,q指针不变,如果此时p移动到第k个位置时,p,q同步移动,当p移动到最后一个结点时q所指向的结点为倒数第k个结点。第一种(普通算法):遍历链表,输出链表的长度,比较链表长度与k的关系,若长度小于k则失败,返回数值0。//p,q指针分别指向链表第一个结点。c//计数,如果count
2022-11-28 11:41:43 520
原创 用信号量实现进程同步与互斥(含代码分析)
信号量简单的来说就是一个变量,代表着系统中互斥资源的数量,通常用原语来实现对信号量机制的操作。一对原语:wait(S)也称为P操作,singnal(S)也称为V操作。weakup(S.L)//如果还有资源在等待则唤醒等待资源的进程。//如果此时没有空闲临界资源则一直循环等待。//如果此时剩余资源不足则进入阻塞状态。//如果资源够用占用一个资源。//信号量变量,表示临界资源的数量。//使用完资源后释放一个资源。void signal(S){//相当于退出区。void wait(S){//相当于进入区。
2022-11-26 15:31:31 1437
原创 设置一个带头结点的循环单链表,其结点均为正整数。设计一个算法反复找出单链表中结点值最小的结点并输出,然后将该结点删除,直到单链表为空为止
算法思想:遍历整个循环链表,依次比较,找出最小值结点并输出删除,循环操作直到单链表只剩余一个头结点,删除头结点。if(p->datadata)//一次循环删除一个最小的结点。p=L->next;//删除一个结点后重新开始遍历。if(L->next!=L){//如果此时链表中还有剩余。=L){//一次遍历。
2022-11-26 14:20:32 1170
原创 进程互斥以及进程互斥实现方法(包含代码)
算法思想:两个进程在访问完临界区之后会把使用临界区的权限交给另一个进程,每个进程进入临界区的权限只能由另一个进程赋予。单标志法的主要问题是违反了空闲让进的原则,当进程0一直不访问临界区,则进程0也无法访问所以违反了空闲让进的原则。缺点:违反了忙则等待的原则。算法思想:设计布尔型的数组,数组中各个元素用来标记进程想进入临界区的意愿。双标志后检查法:双标志后检查法的改版,先上锁后检查,代码如下图。访问临界区的原则:空闲让进,忙则等待,有限等待,让权等待.临界资源:一个时间段内只允许一个进程进行访问的资源。
2022-11-25 19:10:37 1136
原创 9.已知两个链表A和B分别表示两个集合,其元素递增排列,设计一个算法,求A和B的交集,并存放于A链表中(A中只有A与B相同的部分)
算法思想:设置两个指针依次遍历链表A和B,如果A中数据域元素元素小于B中的数据域元素,则释放A中的结点,指向A链表的指针后移,若B中的元素小则释放B中所指结点,如果A中还有剩余则依次释放A中剩余结点,如果B中还有剩余则依次释放B中剩余结点。else(p->data==q->data)//如果此时比较元素相等。else if(p->datadata)//如果p元素较小。if(q->datadata)//如果q元素比较小。
2022-11-23 21:12:47 2817
原创 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原本两个单链表的结点存放归并后的单链表
算法思想:设置两个指针分别指向两个单链表,依次比较两个单链表指针所指的元素值,选择最小元素的结点按照头插法插入到链表中,当两个链表其中一个还有剩余,则将剩余部分按头插法插入到链表中(注意头插防止断链,尾插法设置尾指针)=NUUL)//若P中还有剩余则将剩余部分头插入结点中。=NUUL)//若q中还有剩余则将剩余部分头插入结点中。if(q->datadata)//如果q所指元素小于p的。
2022-11-22 17:02:23 1188 1
原创 在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素。
算法思想:由于线性表有序,值相同的元素一定在逻辑上相邻,设置两个指针遍历链表,删除值相同的元素即可。//如果元素值不等依次后移。//设置一个指针指向第一个结点。//设置一个指针指向第二个结点。=NULL){//如果非空继续比较。//如果元素值相等删除q。
2022-11-22 17:00:14 747
原创 设A和B是两个单链表(带头结点),其中元素递增有序。设计一个算法从A和B中的公共元素产生新链表C,要求不破坏A,B。
算法思想:设置两个指针分别指向A和B,依次遍历A和B,如果A中元素小于B中元素,则指向A链表的指针后移,如果指向B链表的元素小于A链表元素,则B链表指针后移,如果相等则创建一个新结点保存所指元素值,并插入C中。else if(q->datadata)//如果p所指元素大于A。if(p->datadata=q->data)//如果相等。
2022-11-22 16:35:23 1417
原创 数据结构代码实现快速排序
快速排序:在排序表中任取一个元素作为基轴元素,通过一趟排序将排序表从k处拆分分为两个部分,左边小于基轴元素,右边大于基轴元素,k个位置存放基轴元素,依次对基轴左边和基轴右边继续进行快速排序操作,直至划分完全为止。代码思想:选择表头第一个元素作为基轴元素,定义两个变量分别从表头表尾遍历,当大于基轴元素,插入基轴右边,当小于基轴元素插入基轴的左边。while(low
2022-11-20 19:29:58 655
原创 编写一个代码将一个带头节点的单链表A分解为两个带头结点的A和B,使得A表中含有原表中序号为奇数的元素,B表中含有序号为偶数的元素,保持相对位置不变
算法思想:设置一个访问序号变量,每访问一个结点序号自动加1,然后根据序号的奇偶性分别将序号用尾插法插入A或者B中。rb->next=p;//如果是偶序插入单链表B中。ra->next=p;//如果是奇序插入单链表A中。//ra,rb分别指向A,B的尾结点。//让rb始终指向尾结点。//让ra始终指向尾结点。*p=A->next;//p指向A的首结点防止断链。A->next=NULL//置空单链表A。
2022-11-19 19:17:08 700
原创 给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)
给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)
2022-11-18 22:16:36 936 1
原创 1.试编写带头节点的单链表L删除一个最小值节点的高效算法(假设最小值点是唯一的)
算法思想:设置一个指针p遍历线性表,pre为p的前驱,minp标记单链表元素最小值,mpre为minp的前驱。如果p->datadata,将pre和p分别赋值给mpre、 minp,遍历结束把minp指针所指结点删除即可。分析:一般对于链表的插入或者删除一般分为两个步骤:查找和删除(插入)删除一个结点(假设p->next=q)那么首先来复习一下如何遍历单链表。在p结点后插入一个结点s,
2022-11-15 20:31:50 898
原创 顺序表的经典相关代码题(数据结构)
2.对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。算法思想:先将数组(a1,a2...am)逆置,再将(b1,b2...bn)逆置,最后将整体逆置。算法思想:遍历顺序表,用k记录顺序表中值为x的个数,让其中元素不等于x的向前移动k个单位量。算法思想:依次将顺序表L前半部分的元素与顺序表后半部分的元素进行交换。
2022-11-15 19:52:37 541
原创 数据结构经典代码题(从小白开始)
2.对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。算法思想:遍历顺序表,用k记录顺序表中值为x的个数,让其中元素不等于x的向前移动k个单位量。解题思路:第一个元素不重复,依次遍历顺序表,如果值相同就保留下来,如果值不相同就删除。1.设计一个高效算法,将顺序表L的所有元素逆置,要求算法空间复杂度为常数级。算法思想:依次将顺序表L前半部分的元素与顺序表后半部分的元素进行交换。
2022-11-12 17:21:15 2409
原创 数据结构代码题将两个有序表合并为一个有序表,并返回
算法思想:依次比较有序表A和有序表B中的元素,选择一个最小的元素放到有序表C中,若其中一个有序表还有剩余元素,则把剩余元素依次放到C中。whlie(iB.length)//此时B中还有剩余。
2022-11-10 17:42:42 410
原创 数据结构代码,二叉树的建立,树的遍历,求树的深度
二叉树结构体typedef struct BitNode{ Elemptype data; struct BitNode *lchild,*rchild;}BiTNode;二叉树先序遍历void F(BiTree T){ if(T!=NULL){ visit(T); F(T->lchild); F(T->rchild);}}求树的深度int DepTree(BiTree T){
2022-11-10 15:32:27 187
原创 文件目录:FCB、索引节点、目录结构
3.多级目录结构(树形目录结构):两级目录的推广,从根目录出发的路径称为绝对路径,从当前目录出发的为相对路径(与绝对路径相比可减少访问I/O的次数,提高效率)。方便对文件分类,层析结构清晰,更能有效的进行文件的管理与保护,但是不便实现文件的共享。设置一个共享技术器来表示指向该共享文件的链数,当共享计数器为0时,才真正删除该结点,否则仅删除用户请求的共享链。:FCB的改进,将文件名和文件信息分开,使文件信息单独形成一个称为索引结点的数据结构,简称i结点。存放控制文件需要的各种信息的数据结构,以实现按名存取。
2022-11-04 17:42:52 7979 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人