
笔记
绞尽脑汁想个网名
一万小时大师养成计划
展开
-
Mysql
计算机网络原创 2023-05-11 22:18:10 · 1122 阅读 · 0 评论 -
Linux操作系统常用指令
终端是你和计算机进行交流的平台,你可以在终端上输入指令来控制计算机。chmod 权限(4,2,1的组合) 文件/目录。注意:删除目录必须添加-r,文件可加,可不加。功能:在不用打开文件的同时,可以直接查看里边的内容。cp 你要复制的文件 你要复制的位置。第8-10位代表其他用户对文件所拥有的权限。第2-4位表示当前拥有者对文件所有的权限。第5-7位代表同组用户对文件所拥有的权限。mv 文件 你要移动的位置。功能:移动或者是修改文件的名字。功能:修改文件或者是目录的权限。原创 2023-03-09 15:32:01 · 710 阅读 · 0 评论 -
假设二叉树采用二叉链表存储结构,设计一个用非递归的算法求二叉树高度
非递归算法思想:采用层次遍历算法的思想用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 · 2822 阅读 · 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 · 1005 阅读 · 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 · 700 阅读 · 0 评论 -
后续遍历非递归算法
后续遍历非递归算法算法思想:在后续遍历中结点要两次入栈,并且两次出栈。第一次出栈:只遍历完左子树该结点并不出栈。第二次出栈:遍历完右子树,将该结点出栈并访问它。(要保持左右根的顺序,所以要入栈两次,出栈两次)。因此为了区分同一个结点是第几次出栈,设置标志位flag;(1表示第一次出栈,2表示第二次出栈)struct typu{ BiTNode *r; int flag;//记录第一次出栈还是第二次出栈}void PostOrder(BiTree T){InitStack(S);/原创 2022-12-04 21:00:27 · 704 阅读 · 1 评论 -
中序遍历迭代算法(非递归算法)
中序遍历迭代算法(非递归算法)关键:在二叉树的中序遍历中,访问结点的操作发生在左子树遍历完毕,准备遍历右子树时。所以在遇到某结点时并不能立即访问它,而是将它压入到栈中,等到左子树遍历完之后,再重栈中弹出并访问。算法思想:遍历左子树,依次进栈(此时不访问),遍历完左子树之后弹出栈顶结点,访问栈顶结点,遍历右子树,依次循环操作直到栈为空和指针为空。代码:whille(p!=NULL||S.isEmpty){ //当p为空并且,S为空时跳出循环if(p!=NULL){ push(S,p); //原创 2022-12-04 19:59:57 · 593 阅读 · 0 评论 -
树的递归算法与非递归(迭代)的转化重点理解代码(上篇)
算法思想:比较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 · 489 阅读 · 2 评论 -
操作系统P,V操作大总结(包含例题)上篇
桌子上有一个盘子,一次只能放一个水果,爸爸往盘子中放苹果,妈妈往盘子中放橘子。一组生产者和消费者共享大小为n的缓冲区,只有缓冲区不空时消费者才能从中取出产品,只有缓冲区不满时生产者才能往缓冲区放入产品。问题分析:一共四个进程,爸爸,妈妈,儿子,女儿,爸爸往盘子中放苹果,妈妈往盘子中放橘子,儿子从盘子中拿橘子,女儿从盘子中拿苹果。引言:P,V操作必须成对出现,P可简单的理解为消耗一种资源,V可简单的理解为增加一种资源。//增加缓冲区一个产品的数量。//增加空闲缓冲区的数量。//消耗一个空闲缓冲区。原创 2022-12-01 20:27:48 · 1422 阅读 · 0 评论 -
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 · 549 阅读 · 0 评论 -
用信号量实现进程同步与互斥(含代码分析)
信号量简单的来说就是一个变量,代表着系统中互斥资源的数量,通常用原语来实现对信号量机制的操作。一对原语:wait(S)也称为P操作,singnal(S)也称为V操作。weakup(S.L)//如果还有资源在等待则唤醒等待资源的进程。//如果此时没有空闲临界资源则一直循环等待。//如果此时剩余资源不足则进入阻塞状态。//如果资源够用占用一个资源。//信号量变量,表示临界资源的数量。//使用完资源后释放一个资源。void signal(S){//相当于退出区。void wait(S){//相当于进入区。原创 2022-11-26 15:31:31 · 1537 阅读 · 0 评论 -
设置一个带头结点的循环单链表,其结点均为正整数。设计一个算法反复找出单链表中结点值最小的结点并输出,然后将该结点删除,直到单链表为空为止
算法思想:遍历整个循环链表,依次比较,找出最小值结点并输出删除,循环操作直到单链表只剩余一个头结点,删除头结点。if(p->datadata)//一次循环删除一个最小的结点。p=L->next;//删除一个结点后重新开始遍历。if(L->next!=L){//如果此时链表中还有剩余。=L){//一次遍历。原创 2022-11-26 14:20:32 · 1220 阅读 · 0 评论 -
进程互斥以及进程互斥实现方法(包含代码)
算法思想:两个进程在访问完临界区之后会把使用临界区的权限交给另一个进程,每个进程进入临界区的权限只能由另一个进程赋予。单标志法的主要问题是违反了空闲让进的原则,当进程0一直不访问临界区,则进程0也无法访问所以违反了空闲让进的原则。缺点:违反了忙则等待的原则。算法思想:设计布尔型的数组,数组中各个元素用来标记进程想进入临界区的意愿。双标志后检查法:双标志后检查法的改版,先上锁后检查,代码如下图。访问临界区的原则:空闲让进,忙则等待,有限等待,让权等待.临界资源:一个时间段内只允许一个进程进行访问的资源。原创 2022-11-25 19:10:37 · 1190 阅读 · 0 评论 -
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 · 2949 阅读 · 0 评论 -
假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原本两个单链表的结点存放归并后的单链表
算法思想:设置两个指针分别指向两个单链表,依次比较两个单链表指针所指的元素值,选择最小元素的结点按照头插法插入到链表中,当两个链表其中一个还有剩余,则将剩余部分按头插法插入到链表中(注意头插防止断链,尾插法设置尾指针)=NUUL)//若P中还有剩余则将剩余部分头插入结点中。=NUUL)//若q中还有剩余则将剩余部分头插入结点中。if(q->datadata)//如果q所指元素小于p的。原创 2022-11-22 17:02:23 · 1272 阅读 · 1 评论 -
在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素。
算法思想:由于线性表有序,值相同的元素一定在逻辑上相邻,设置两个指针遍历链表,删除值相同的元素即可。//如果元素值不等依次后移。//设置一个指针指向第一个结点。//设置一个指针指向第二个结点。=NULL){//如果非空继续比较。//如果元素值相等删除q。原创 2022-11-22 17:00:14 · 795 阅读 · 0 评论 -
设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 · 1517 阅读 · 0 评论 -
数据结构代码实现快速排序
快速排序:在排序表中任取一个元素作为基轴元素,通过一趟排序将排序表从k处拆分分为两个部分,左边小于基轴元素,右边大于基轴元素,k个位置存放基轴元素,依次对基轴左边和基轴右边继续进行快速排序操作,直至划分完全为止。代码思想:选择表头第一个元素作为基轴元素,定义两个变量分别从表头表尾遍历,当大于基轴元素,插入基轴右边,当小于基轴元素插入基轴的左边。while(low原创 2022-11-20 19:29:58 · 685 阅读 · 0 评论 -
编写一个代码将一个带头节点的单链表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 · 737 阅读 · 0 评论 -
给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)
给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)原创 2022-11-18 22:16:36 · 979 阅读 · 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 · 956 阅读 · 0 评论 -
顺序表的经典相关代码题(数据结构)
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 · 568 阅读 · 0 评论 -
数据结构经典代码题(从小白开始)
2.对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。算法思想:遍历顺序表,用k记录顺序表中值为x的个数,让其中元素不等于x的向前移动k个单位量。解题思路:第一个元素不重复,依次遍历顺序表,如果值相同就保留下来,如果值不相同就删除。1.设计一个高效算法,将顺序表L的所有元素逆置,要求算法空间复杂度为常数级。算法思想:依次将顺序表L前半部分的元素与顺序表后半部分的元素进行交换。原创 2022-11-12 17:21:15 · 2556 阅读 · 0 评论 -
数据结构代码题将两个有序表合并为一个有序表,并返回
算法思想:依次比较有序表A和有序表B中的元素,选择一个最小的元素放到有序表C中,若其中一个有序表还有剩余元素,则把剩余元素依次放到C中。whlie(iB.length)//此时B中还有剩余。原创 2022-11-10 17:42:42 · 423 阅读 · 0 评论 -
数据结构代码,二叉树的建立,树的遍历,求树的深度
二叉树结构体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 · 203 阅读 · 0 评论 -
数据结构经典代码题在带头节点的单链表L中,删除所有值为x的结点,并释放其空间
数据结构代码题原创 2022-11-09 21:21:58 · 693 阅读 · 0 评论 -
数据结构代码尾插法建立单链表
数据结构代码题原创 2022-11-09 21:00:33 · 595 阅读 · 0 评论 -
代码实现头插法建立一个带头结点的单链表,输入-1表示结束
数据结构代码题原创 2022-11-09 20:47:57 · 1417 阅读 · 1 评论 -
文件目录:FCB、索引节点、目录结构
3.多级目录结构(树形目录结构):两级目录的推广,从根目录出发的路径称为绝对路径,从当前目录出发的为相对路径(与绝对路径相比可减少访问I/O的次数,提高效率)。方便对文件分类,层析结构清晰,更能有效的进行文件的管理与保护,但是不便实现文件的共享。设置一个共享技术器来表示指向该共享文件的链数,当共享计数器为0时,才真正删除该结点,否则仅删除用户请求的共享链。:FCB的改进,将文件名和文件信息分开,使文件信息单独形成一个称为索引结点的数据结构,简称i结点。存放控制文件需要的各种信息的数据结构,以实现按名存取。原创 2022-11-04 17:42:52 · 9097 阅读 · 1 评论 -
文件管理(操作系统)
操作系统文件的逻辑结构原创 2022-11-04 16:51:42 · 670 阅读 · 0 评论 -
数据结构应用题总结(栈)
有关栈的应用后缀表达式求值问题原创 2022-10-14 15:08:26 · 548 阅读 · 0 评论 -
选择排序(简单选择排序,堆排序)
堆排序和简单选择排序时间复杂度空间复杂度详细分析原创 2022-10-09 11:28:47 · 589 阅读 · 0 评论 -
交换排序模块(冒泡与快速)
关于交换排序中的冒牌排序和快速排序的分析原创 2022-10-08 21:58:44 · 181 阅读 · 0 评论 -
排序的概念以及算法分析(一)
关于数据结构排序算法,这次一次内容先描述插入排序板块,后续我会持续更新。原创 2022-10-08 17:45:41 · 180 阅读 · 0 评论 -
线性表的顺序存储(含代码示例,时间复杂度分析)
线性表的顺序存储以及时间复杂度分析(含代码示例)超详细讲解原创 2022-07-23 18:03:45 · 2665 阅读 · 0 评论 -
算法的特性及概念
算法的概念,算法的特性,好算法所具有的性质原创 2022-07-11 14:53:24 · 1092 阅读 · 0 评论 -
C语言sizeof 进制 位的用法(基础)
#define _CRT_SECURE_NO_WARNINGS 1//函数f(x)=ax+b;f(x,y)=ax+by+c;//#include<stdio.h>//int Add(int x,int y) {//Add称为自定义函数// int z = x + y;//传入两个参数// return z;//返回整形Z(int) Add函数名// }//int main() {// int a=10, b=20;// int sum,max;///...原创 2022-05-16 22:44:12 · 174 阅读 · 0 评论 -
C语言基础2
#define _CRT_SECURE_NO_WARNINGS 1/*常量字面常量const 修饰的常变量#define定义的标识符常量枚举常量*///#include<stdio.h>//#define Max 10//定义的标识符常量,本身是个常量可以被数组引用//int main() {// //const int num = 2;//const修饰的常变量本质上还是变量// //printf("num=%d\n", num);// //// n...原创 2022-05-15 10:33:21 · 135 阅读 · 0 评论 -
初识C语言
/*#include<stdio.h>int main() //主函数-程序入口()-有且只有一个{ printf("heheh\n");//完成任务的地方 return 0;//返回}*///int 是整形的意思,main函数前面的int表示main函数调用返回一个整形值//return 0;//返回一个整数0/*int main() { char ch = 'A'; printf("%c\n", ch);//%c打印字符格式的数据%d打印...原创 2022-05-11 21:49:35 · 227 阅读 · 0 评论 -
表达式求值问题二(前缀 后缀 中缀过程)
中缀表达式转后缀表达式初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:①遇到操作数。直接加入后缀表达式。②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。*/优先级高于+-按上述方法处理完所有字符后,将栈中剩余运算符依次原创 2022-04-07 21:32:41 · 169 阅读 · 0 评论