自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一寸一寸光阴

我一定要拥有的是只属于我自己的独特人生

  • 博客(186)
  • 收藏
  • 关注

原创 5.4.1树的存储结构

在找某个节点的孩子时,直接找该节点对应的firstChild字段指向的链表即可找到所有孩子节点的index位置,找孩子方便,在找某个节点的父亲时,只能遍历所有的节点的链表,然后找出firstChild指向的孩子链表中有该节点的元素,对应的data即为该节点父亲,即找父亲时不方便,适用于找孩子多,找父亲少的情况,如服务流程树,拨打电话普通话服务请按1,然后再问你办理业务1按#键啥的,,,,直到找到最下一层服务节点。用数组记录每个节点的父节点在数组中的索引位置,纯顺序存储。

2025-06-12 21:40:24 365

原创 8.3.1_冒泡排序

变量j-1:即数组中的最后一个元素位置,用来比较index=j和index=j-1位置上的元素的值大小,如果[j-1] >A[j]交换位置,如果A[j-1] =A[j]不改变位置用来保持算法的稳定性,如果A[j-1]<A[j]位置不变。第3趟冒泡,有n个元素需要比较n-3次(两两比较,但是因为前2个元素已经排好序了,不用再比较了,即只需两两比较n-2个元素,需要比较n-3次),交换n-3次。第2趟冒泡,有n个元素需要比较n-2次(两两比较,但是因为第一个元素已经排好序了,不用再比较了),交换n-2次。

2025-06-11 21:57:07 289

原创 5.4.2树、森林与二叉树的转换

先画一个根节点A,开始从上到下从左到右处理第一层的A节点,A有B、C孩子,用右指针把B、C连起来,然后把第一个孩子B挂在当前节点A的左指针指向下边,此时C是B的右孩子,B是A的左孩子,再处理第2层B、C,从左到右先处理B,B有3个孩子D、H、F,用右指针依次连起来D-H-F,然后把第一个孩子D放到B的左指针下边成为B的左孩子,H成为D的右孩子,F成为H的右孩子。2.从树的根节点开始,按树的层序恢复每个节点(注意是树的层序,不是二叉树的层序,从上到下、从左到右的顺序)1.先画出树的根节点。

2025-06-11 21:10:04 552

原创 5.3.2_2二叉树的线索化

过程和上边土方法同。执行执行执行,访问访问访问。解决办法看图3,在访问节点的左孩子的时候查看左孩子指针是否是线索指针,如果不是才去访问是的话不再访问否则就又去访问上一个前驱节点了(因为当前节点在访问时会补充前驱节点,即让左孩子指针指向前驱节点,而先序遍历是先访问当前节点,再去访问当前节点的左子树节点,这样如果开始左孩子为空,再补充了前驱节点后左孩子又不为空又去访问前驱节点了,比如第一次访问A,再访问A的左孩子B,B没有左孩子但访问B时B的左孩子指向了前驱A,然后再访问B的左孩子时又开始访问A,变成循环)。

2025-06-07 20:52:22 855

原创 7.2.2_折半查找

查找成功概率:一共有11个数,每个数被查找的概率相同记为1/11,查找成功过程如下:第一层有1个数,和该树比较1次,第2层有2个数,如13,需要先和29比较再和13比较即比较2次,37同,则2次*2个数,第3层4个数,每个数都需要比较3次,如10,需要先和29、13比较再和10比较即比较3次,剩余数同级3次*4个数,其他层也同则平均查找长度=各个关键字比较次数之和X每个关键字查找概率即ASL(成功)=(1*1+2*2+3*4+4*4)/11=3。折半查找判定树一定是平衡二叉树(啥叫平衡二叉树来着?

2025-06-07 17:59:44 948

原创 5.3.2_1线索二叉树的概念

如下所示中序序列DGBEAFC,D的左孩子指针指向NULL,且前驱没有即没有在D之前访问别的节点即D的左孩子指针指向null,右孩子指针指向G不变,G的左右孩子指针都是空链域,G的前驱是D后继是是B让G的左孩子指针指向D,G的右孩子指针指向B,B的左右孩子指针都不是空链域则不变,E的左右孩子指针都是空链域且E的前驱是B后继是是A让E的左孩子指针指向B,E的右孩子指针指向A,F和C同。某个节点的中序:在中序序列中该节点的右孩子指针指向的后继节点(在中序序列中紧挨着该节点且在该节点后面的节点)

2025-06-07 12:42:07 844

原创 5.4.3树和森林的遍历

如下:根节点为A,A的子树为B、C、D,即A BCD的顺序,再从左到右对B的子树进行先序遍历根左右即BEF(即对B进行拆分),E还有分支,再对E的分支进行先序遍历访问即EK则为ABEFK,再对A的子树C进行先序遍历即CG,再对D的子树进行先序遍历,先H且H无分支再对I节点进行访问I无分支再对J进行先序遍历访问J无分支则结束。如下图对根节点为B的树进行后根遍历(左右根),上同例子为KLEFB,再对根节点为C的树进行后根遍历,即GC,再对D根节点进行后根遍历即MHIJD,合在一起即为KLEFBGCMHIJD。

2025-06-06 21:14:30 385

原创 8.1_排序的基本概念

让关键字按递增或递减的顺序排列,在排序中关键字可重复。

2025-06-06 20:17:18 257

原创 7.2.1_顺序查找

直到到如下数组中第n个数,因为n前后有2个范围段所以加了2次n,最后得到ASL=n/2+(n+1)/n。假设找任何一个关键字的概率都是相同的,如果一共有n个关键字,假设找最后一个关键字则概率为1/n,如果找倒数第2个关键字,则需要对比2次,则找到的概率为2* 1/n,依次类推需要比较n次,则平均查找长度为(1+2+3+...+n)/n=(n+1)/2,查找失败为查找所有的数据都没有查找到,即比较了n+1次(有加1是因为哨兵还占了一个位置),即查找成功和查找失败的时间复杂度都为O(n)

2025-06-06 20:01:31 396

原创 5.3_3由遍历序列构造二叉树

层序遍历一层层的,第一个出现的是根节点即D,由中序序列知EAF是D的左子树、HCBGI是D的右子树,先看D的左子树,由层序遍历知第2、3节点为D的左子树和右子树的根节点,分别是A、B,再通过中序遍历知E、F分别是A的左子树,HC和GI分别是B的左子树、右子树,再通过层序遍历知E、F的后边是C和G则C和G为根节点(或者说C在H前边所以C是H的根节点,G在I前边G是I的根节点?),再由中序遍历知H在C的左边即H是C的左子树,C无右子树,I是G的右子树,G无左子树。如下必须有中序遍历才能构造二叉树。

2025-06-03 20:19:11 846

原创 5.3.1_1二叉树的先中后序遍历

按照某种次序把所有节点都访问一遍。

2025-06-02 20:24:41 665

原创 3.1.1栈的基本概念

也是一种线性表,只允许在一端操作栈顶:允许插入和删除的一端栈底:不允许插入和删除的一端先进后出(压栈)

2025-05-29 20:55:45 175

原创 5.3.1_2二叉树的层次遍历

如下:根节点A入队之后,队列不为空则A出队访问A,然后A的左右孩子BC(如果A有左右孩子)入队,先左B入队再右C入队,此时队头元素为B,然后判断队列不为空,则B出队然后访问B+B的左右孩子DE入队(D左D先入队),即此时队列元素为CDE,判断队列不为空则队头C出队+访问C+C的左右孩子FG入队(F左先入队),即此时队列元素为DEFG,再次循环。初始化一个辅助队列,让根节点先入队,每次判断队列是否为空,不空则让队头节点出队+访问该节点+让该节点左右孩子入队尾(先左孩子入队再右孩子)

2025-05-29 20:40:50 259

原创 5.2.2二叉树的存储结构

把普通二叉树不存在的编号写上然后再放到treeNode数组里,只是不存在的节点编号对应的Index位置存储的元素ElemType为空,isEmpty字段为true,因为如下:假设把普通二叉树不存在的节点按照完全二叉树的顺序也排布上,即虽然普通二叉树实际的节点数=8,但是按照顺序排布后认为是12个节点(最后一个节点编号是12)即n=12,当i=2时,判断i是否有左孩子2i<=n,2*2<=12条件成立但不适用,所以判断是否某个节点有左孩子要用isEmpty字段(根据视频上的讲解个人理解,可能理解有误)

2025-05-28 21:48:56 528

原创 6.4.2_3最短路径问题_Floyd算法

中转点V1:既然是V1作为中间点出现,那必然要找指向V1的点作为起点V2和从V1指出的点(此时不要直接看图,要看邻接矩阵)V3、V4,可得V1作为中间点、V2作为起点有2条路径,V2->V1->V3=1+1=2,但是V2->V3没有直接路径即∞,修改A(1)[2][3]=2,path(1)[2][3]=1,另一条V2->V1->V4=1+5=6,V2直接到V4=7,则修改A(1)[2][4]=6,path(1)[2][4]=1【修改对应path上的横纵坐标确定的值为1】

2025-05-28 20:55:36 810

原创 6.4.5_关键路径

当关键活动的时间被缩短到一定时间时可能会变成非关键活动,此时关键路径也会发生变化,如下切番茄由关键活动压缩时间到0.5,此时洗番茄+打鸡蛋+炒菜=1+0.5+2=3.5<打鸡蛋+炒菜=2+2=4,此时关键路径已经发生改变,因为切番茄已经不是关键活动,所以继续缩短切番茄的时间也不会影响最后的结束时间了。各个事件发生的最早开始时间=对应各个活动的最早开始时间,从开始顶点推算出各顶点最早开始时间,通过结束顶点逆推出各个顶点的允许的最迟发生时间,进而得出各个活动的最迟发生时间。

2025-05-27 20:33:40 428

原创 6.4.4_拓扑排序

AOV网:aov网一定是一个有向无环图,如果存在环路则不是aov网,每个顶点代表一个活动,每个有向边<Vi,Vj>Vi活动必须先于Vj活动进行。即在如下炒番茄的aov网中,<V买菜,V洗番茄>要洗番茄必须先买菜,要切番茄必须先洗番茄+准备厨具,即在进行某个活动时,指向该活动的活动都必须先完成才可以。

2025-05-25 20:24:16 954

原创 6.4.3_有向无环图描述表达式

3.按2标出的顺序开始分层给1列出的操作数加入操作符,如(1)为a+b则给a、b在第一层加+号,(2)为c+d的值在第一层给c、d加+号,(3)为b*(c+d)即需要用到第一层(2)+号的值,则在第2层加入*号指向b和第一层指向c、d的+号,(4)为需要用到第一层a+b的值*第2层b*(c+d)的值,则比最高层第二层再高一层添加*号指向第一层的+(指向a、b)和第二层的*(指向b和第一层的+号)依次类推即需要用到某层的值都需要在该层的基础上再加一层得到操作数不重复的数。算术表达式用树来表示,咋表示?

2025-05-25 19:02:20 448

原创 6.4.2_2最短路径算法-Dijkstra算法

V0->V0最短路径长度为0,dist[0]=0,V0->V1,根据图V0和V1直接相连且权值为10,即初始化的时候dist[V1]=10,V0到V2没有直接相连的边,所以目前V0到V2没有最短路径,即dist[V2]=∞,V0到V3同dist[V3]=∞,V0到V4直接相连的边的权值为5即目前V0单源到V4最短路径为dist[4]=5,path[]数组用来记录每个顶点在最短路径上的直接前驱,设置从图上能显而易见得到的最短路径的直接前驱。path[0]=-1。膜拜大佬大佬大佬大佬。

2025-05-25 16:25:19 837

原创 6.4.2_1最短路径问题_BFS算法

如下最终得到了一个d[]和path[]的值,可以得到各个顶点与单源顶点的最短路径长度+路径序列,如顶点为8的到单源2的最短路径长度为d[8]=3,路径序列求法从当前顶点开始一直往前找path直到找到path的值为单源顶点的整个序列就是该顶点到单源的路径序列,如8顶点:8顶点对应的前驱path[8]=7,path[7]=6,path[6]=2,即找到了单源依次路径序列为8、7、6、2即8<-7<-6<-2(左朝向是因为是求单源到各个顶点的路径长度,所以让单源指向)单源:一个源头出发到各个其他顶点最短路径。

2025-05-25 13:43:56 250

原创 6.4.1最小生成树

初始化:2个数组,isJoin数组记录已经加入生成树的节点,lowCost数组记录要加入当前生成树各个节点花费的代价,初始化时vo已经加入生成树,其他顶点还没加入生成树,vo和v1直接相连有一条边权值为6,则加入当前生成树V1花费代价为6,v0和V2相连边上的权值为5,则v2加入当前生成树花费代价为5,同理v3代价为1,v4和v5并不和v0直接相连,所以认为花费代价是∞。只有连通的无向图才有生成树,不连通的无向图有多个连通分量,每个连通分量有生成树,合起来叫生成森林,单个的不连通的无向图没有生成树。

2025-05-25 12:49:24 539

原创 7.1查找的基本概念

二叉排序数ASL(没看视频不知道):比如查找50就跟50关键字进行了对比所以对比了1次,然后就1个数1,第2层有俩数,查找第2层的需要比较2次是2*2,第3层有4个数,比较第三层的某个数需要比较3次,所以是3*4,第4层1个数比较需要4次,所以是4*1,求和再除以8=平均查找长度。平均查找字段(ASL):加入了概率(每种情况发生的概率),把每个发生的情况*发生的概念之和就是平均查找长度,一般认为各个情况发生概率相同。查找表(查找结构):存储数据的结构的统称,本身不是一种数据结构。查找:找到你想要的数据。

2025-05-24 20:44:15 285

原创 6.3.2图的深度优先遍历

知识总览:树的先根遍历:采用递归一直找某个节点的子树直到找不到从上往下找访问根节点1,1的子树有2、3、4,访问2,2节点子树有5访问5,5没有子树,退回到2,2还有子树6访问6,6没有子树再退回到2,2的子树都被访问了再退回到1,1还有子树3没访问访问3,3没子树退回到1,1还有子树4没访问访问4,4的子树有7、8,访问7,7没有子树退回到4,4还有子树8没访问访问8,8没子树退回到4,4的子树都访问了退回到1,1的子树都访问了,访问完毕。节点序列为1,2,5,6,3,4,7,8。

2025-05-24 18:39:08 535

原创 6.3.1图的广度优先遍历

,7被访问并visited[7]=true,7入队放到队尾,Q中此时有5、3、7节点,头指针指向5,继续下一轮出队for循环操作,,,,,,,,直到队列为空(所有的节点在当前while循环中都被访问了,访问的是它的邻接点,如果邻接点为空,证明所有的节点都被访问了,所有入队的都是被访问过的)计算机中处理某一层的相邻节点时是一个个节点的相邻节点处理的,即如下树图在找2、3、4这一层的相邻节点时,只能先处理2的相邻节点再依次处理3、4节点的相邻节点,开始没被处理到的节点先放到一个辅助队列,图类似。

2025-05-24 16:57:29 858

原创 1.2.1+1.2.2计算机硬件的基本组成

计算机是用来处理数据的,先给计算机输入要处理的数据,通过输入设备把要处理的数据+程序指令转成计算机能识别的数据0101,然后输入设备再传输给运算器,运算器中转给存储器(后来的内存),在存储器存放要处理的数据+程序指令,经过运算器计算的算数运算(+-*/)和逻辑运算(与或非)之后,再通过输出设备将运算结果转成人类熟悉的形式输出,控制器通过电信号协调各部件运行,先去存储器把数据和程序指令解析,解析完了之后操作运算器进行运算。CPU:运算器(运算)+控制器,因为这俩关系紧密,会把这俩放到一个芯片上。

2025-05-23 20:03:40 434

原创 2.4.4-死锁的处理策略-检测和解除

如下所示:p1申请R2资源2个,R2一个一共俩,给了P3进程1个,给了P2进程1个,故R2=0,则P1请求不能满足,P1阻塞,P2申请R1资源1个,R1一共仨,给了P1进程2个,P2进程1个,故R1=0,则P2请求不能满足,P2阻塞,P3进程没有请求有1个R2资源,P3正常运行,运行完之后释放R2,归还所有资源并消除与P3相连的所有边,归还后R2=1,还是不满足P1请求,P1、P2继续阻塞,所有边未被消除,则出现死锁,连着边的进程P1、P2是处于死锁状态的进程。4.进程是交互式的还是批处理式的。

2025-05-21 20:59:08 943

原创 2.4.2死锁的处理策略-预防死锁

第一种:A进程已经有了3个资源,还有某个资源请求使用,如果这个资源暂时得不到满足,就释放已经拿到的所有资源,以下2种破坏不剥夺让A进程自动释放已经拿到的3个资源,即使这些资源A进程还没用完,破坏了不剥夺条件,但是如果每次A进程都释放所有资源,可能出现释放了3个,再重新申请第3个资源又申请不到然后等待又主动释放拿到的2个资源,然后再重新申请3个资源,再申请第2个的时候又拿不到第2个资源,再释放已经拿到的第1个资源,依次类推,可能导致A进程出现饥饿现象。第二种:让操作系统去抢夺别的进程拿到的资源。

2025-05-20 21:31:27 762

原创 2.4.1死锁的概念

4.循环等待:我等你你等它又等我的环路(发生死锁一定有循环等待,但是有循环等待不代表一定发生死锁,比如下图中的白爷爷,1、2、3、4、5号和白爷爷之间有循环等待,而3号等的4号的资源和白爷爷拿的资源是一个可替代同类资源,则如果现在白爷爷释放了手中的资源,3号拿到了,那循环等待将被打破,故当是循环等待时+资源无可替代资源即唯一时,必定会发生死锁)死锁和饥饿是操作系统需要考虑的,死循环一般是程序员写的代码逻辑有问题,需要被管理者程序员考虑,三者都是一种无法向前推进的现象。1.对不可资源资源的竞争可能引起死锁。

2025-05-20 20:32:41 163

原创 6.2.5图的基本操作

邻接表:找出边直接找x节点下的第一个边节点,即时间复杂度为O(1),找入边要遍历所有边的信息,即遍历其他节点下的所有边节点,可能遍历其他边的时候遍历的第一个边的边节点就是x节点,即最好时间复杂度为O(1),最坏是遍历完所有的边节点也没有找到x节点,即最坏时间复杂度为O(|E|)邻接表:删除入边,删除x顶点下的所有的边节点,则要看变节点数量,最好没有或只有1个边节点,则时间复杂度O(1),最坏有v-1个边节点,则最坏O(v-1)=O(v),删除入边,则要遍历所有边节点,最坏时间复杂度为O(|E|)

2025-05-18 19:34:10 984

原创 6.2.3+6.2.4十字链表、邻接多重表

和十字链表类似,对于A节点来说,有B和D节点和A直接相邻。从A节点firstEdge指针指向出发,可以看到指向了0和1块,即0编号节点指向1编号节点(因为是无向图,也可以说是1指向0,这俩等价),即对应的A节点指向B节点,因为A节点所对应的0号节点是橙色块,所以再从0和1块所在的橙色块发出的线出发指向了0和3块,即0编号节点指向3编号节点(也可以说是3指向0,这俩等价),即对应的A节点指向D节点,继续从当前0和3块的橙色块发出的线出发,发现当前的橙色块有^标识,即再无节点和A节点相邻了,到此结束。

2025-05-18 17:26:16 815

原创 6.2.2邻接表法-图的存储

因为是无向图,一条边就要在2个节点VNode的first指针存储2个边节点信息。有向图的入度=遍历所有的节点信息,看看哪个节点上的first指针下有该节点的和(如A节点的入度就是遍历所有的节点,看看哪个节点的first指针下有边节点A,有A的数量之和即为入度),因为求入度要遍历所有节点,所以时间开销大。无向图中空间复杂度=顶点的占用空间+2倍边的空间=O(|v|+2|E|)(应该是就存储顶点信息+first指针吧,first指针又存储了边节点,边节点又和边的数量有关系,所以实际是存储的边节点信息。

2025-05-18 15:49:49 277

原创 4.1.9文件保护

用户1为文件1设置了口令(一般为一串字符串),用户2访问文件1时需要提供该口令,一般口令放在文件的FCB文件控制块或者索引节点中,字符串一般占用空间不大,所以保存口令的空间开销不多,因为在访问文件时也需要把文件的FCB调入到内存,所以操作系统在验证用户提供的口令与设置的口令一致不一致花费的时间开销也较小,但是不够安全,因为存放在系统内部,可能会攻击系统?? 另外一个用户要访问该文件,只需让设置加密文件的用户告诉对应使用加密或者解密的秘钥即可,但是访问文件时解密和加密需要花费系统时间,这个秘钥啥的没存在系统中

2025-05-18 14:31:21 144

原创 4.1.8文件共享

假如用户1和用户2不再共享使用文件1,则文件1中的链接计数count=0,即文件1会被删除,此时用户3中的link文件依然存在,即真实共享文件的删除和link文件是否被删除无关,但是此时用户3再去通过link文件ccc访问文件1会报错 ,如下图所示QQ的.exe程序被删除后,再打开QQ的快捷方式会报错找不到文件。用户1创建文件1,并让文件目录项aaa指向了文件1,这个文件对应了一个索引节点,这个索引节点 包含了文件的物理地址和文件的其他属性信息+链接计数变量count(用来记录有几个用户共享了这个文件)

2025-05-18 14:07:02 380

原创 6.2.1邻接矩阵法-图的存储

如下图A到C的边的权值为1,因为无向则C到A的权值也为1,即(A,C)=1,(C,A)=1,则看邻接矩阵中的横坐标为A(A所在行),纵坐标为C(C所在列)确定的值为1,C所在行,A所在列确定值为1,A和E顶点没有直接相连的边,即(A,E)=0或∞,(E,A)=0或∞,即A所在行和E所在列确定的值为∞,E所在行A所在列确定值为∞。a11即第一行A和第一列A矩阵值为0,即从A节点到A节点没边没路径,a14第一行A和第4列D值为0即从A节点到D节点没边没路径,0X0=0即路径从A到A,再A到D这样的路径没有。

2025-05-18 13:12:34 471

原创 6.1.1图的基本概念

基本概念。

2025-05-17 21:11:32 621

原创 5.2.1_2二叉树的性质

非空二叉树中的度只有0(叶子节点)、1和2,则假设度为0的节点数为n0,度为1的节点数为n1,度为2的节点数为n2,则该二叉树的节点个数=n0+n1+n2(1)树的节点数=总度数+1即二叉树的节点个数=0Xn0+1Xn1+2Xn2+1= n1+2n2+1(2)(2) - (1)得 n0= n2+1 完全二叉树有2K偶数个节点:2K=n0+n1+n2,n0+n2为奇数,则n1必为奇数1 先简单做个记录,等着再去背诵。。。。。。

2025-05-17 17:40:19 203

原创 操作系统-对空闲磁盘块的管理

记录一下,但是记录了我会会吗。。。。。。。。。

2025-05-17 14:29:53 1132

原创 win10-django项目与mysql的基本增删改查

对于char类型的字符串字段,即使你没有在代码里标注默认值或者允不允许为空,它也是可以为空的,即即使截图中的app01_userinfo 表里显示name not null,但是你在使用create函数在表里新增数据时,不给name字段注明值也是可以的它会默认为空字符串。)新增,即给mysql表里的字段赋值,调用该函数时,orm框架会转成对应的Insert语句,把类名转成对应的表名,把字段和值转成mysql中的列和值啥的。1.引入表对应的在models.py中的类class。以上只是简单的语法测试。

2025-05-16 21:45:10 267

原创 操作系统-文件的物理结构

操作系统

2025-05-14 21:58:51 625

原创 win10-django项目连接本地mysql

删除已创建表的一个字段---直接在代码里注释该class类的这个字段,再依次执行python manage.py makemigrations和python manage.py migrate命令即可。给已创建表添加一个字段---直接在代码对应的calss类里添加该字段,因为涉及到未添加该字段之前表里已经有数据了,所以得给新加的字段设置一个默认值,或者允许为空,否则在执行命令的时候会询问是咋办。前提:app已经注册,mysql已经安装好并且创建了数据库。虽然做笔记了,但是还是不会,先做上笔记吧。

2025-05-11 20:11:54 341

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除