⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xtjd4.htm

📁 严蔚民版的数据结构的完整课件
💻 HTM
📖 第 1 页 / 共 2 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;r=(LStrNode*)malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;ch=p-&gt;ch;<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next=r;q=r;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;q-&gt;next=NULL;<br>
}//StringAssign
<p>void StringCopy(LString &amp;s,LString t)//把串t复制为串s.与前一个程序的区别在于,串s业已存在.<br>
{<br>
&nbsp;&nbsp;for(p=s-&gt;next,q=t-&gt;next;p&amp;&amp;q;p=p-&gt;next,q=q-&gt;next)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;ch=q-&gt;ch;pre=p;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;while(q)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;p=(LStrNode*)malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;ch=q-&gt;ch;<br>
&nbsp;&nbsp;&nbsp;&nbsp;pre-&gt;next=p;pre=p;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;p-&gt;next=NULL;<br>
}//StringCopy
<p>char StringCompare(LString s,LString t)//串的比较,s&gt;t时返回正数,s=t时返回0,s&lt;t时返回负数<br>
{<br>
&nbsp;&nbsp;for(p=s-&gt;next,q=t-&gt;next;p&amp;&amp;q&amp;&amp;p-&gt;ch==q-&gt;ch;p=p-&gt;next,q=q-&gt;next);<br>
&nbsp;&nbsp;if(!p&amp;&amp;!q) return 0;<br>
&nbsp;&nbsp;else if(!p) return -(q-&gt;ch);<br>
&nbsp;&nbsp;else if(!q) return p-&gt;ch;<br>
&nbsp;&nbsp;else return p-&gt;ch-q-&gt;ch;<br>
}//StringCompare
<p>int StringLen(LString s)//求串s的长度(元素个数)<br>
{<br>
&nbsp;&nbsp;for(i=0,p=s-&gt;next;p;p=p-&gt;next,i++);<br>
&nbsp;&nbsp;return i;<br>
}//StringLen
<p>LString * Concat(LString s,LString t)//连接串s和串t形成新串,并返回指针<br>
{<br>
&nbsp;&nbsp;p=malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;for(q=p,r=s-&gt;next;r;r=r-&gt;next)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next=(LStrNode*)malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;&nbsp;&nbsp;q=q-&gt;next;<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;ch=r-&gt;ch;<br>
&nbsp;&nbsp;}//for //复制串s<br>
&nbsp;&nbsp;for(r=t-&gt;next;r;r=r-&gt;next)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next=(LStrNode*)malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;&nbsp;&nbsp;q=q-&gt;next;<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;ch=r-&gt;ch;<br>
&nbsp;&nbsp;}//for //复制串t<br>
&nbsp;&nbsp;q-&gt;next=NULL;<br>
&nbsp;&nbsp;return p;<br>
}//Concat
<p>LString * Sub_String(LString s,int start,int len)//返回一个串,其值等于串s从start位置起长为len的子串<br>
{<br>
&nbsp;&nbsp;p=malloc(sizeof(LStrNode));q=p;<br>
&nbsp;&nbsp;for(r=s;start;start--,r=r-&gt;next); //找到start所对应的结点指针r<br>
&nbsp;&nbsp;for(i=1;i&lt;=len;i++,r=r-&gt;next)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next=(LStrNode*)malloc(sizeof(LStrNode));<br>
&nbsp;&nbsp;&nbsp;&nbsp;q=q-&gt;next;<br>
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;ch=r-&gt;ch;<br>
&nbsp;&nbsp;} //复制串t<br>
&nbsp;&nbsp;q-&gt;next=NULL;<br>
&nbsp;&nbsp;return p;<br>
}//Sub_String
<p>4.22
<p>4.23
<p>书后对这两题给出了一些提示.由于作者对这些提示的可行性感到困惑,或者尚没有完全理解其意图,致使无法给出参考算法.请读者认真思考后自行写出,欢迎发表你的解答.
<p>4.24
<p>void HString_Concat(HString s1,HString s2,HString &amp;t)//将堆结构表示的串s1和s2连接为新串t<br>
{<br>
&nbsp;&nbsp;if(t.ch) free(t.ch);<br>
&nbsp;&nbsp;t.ch=malloc((s1.length+s2.length)*sizeof(char));<br>
&nbsp;&nbsp;for(i=1;i&lt;=s1.length;i++) t.ch[i-1]=s1.ch[i-1];<br>
&nbsp;&nbsp;for(j=1;j&lt;=s2.length;j++,i++) t.ch[i-1]=s2.ch[j-1];<br>
&nbsp;&nbsp;t.length=s1.length+s2.length;<br>
}//HString_Concat
<p>4.25
<p>int HString_Replace(HString &amp;S,HString T,HString V)//堆结构串上的置换操作,返回置换次数<br>
{<br>
&nbsp;&nbsp;for(n=0,i=0;i&lt;=S.length-T.length;i++)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;for(j=i,k=0;k&lt;T.length&amp;&amp;S.ch[j]==T.ch[k];j++,k++);<br>
&nbsp;&nbsp;&nbsp;&nbsp;if(k==T.length) //找到了与T匹配的子串:分三种情况处理<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(T.length==V.length)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(l=1;l&lt;=T.length;l++) //新子串长度与原子串相同时:直接替换<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S.ch[i+l-1]=V.ch[l-1];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(T.length&lt;V.length) //新子串长度大于原子串时:先将后部右移<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(l=S.length-1;l&gt;=i+T.length;l--)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S.ch[l+V.length-T.length]=S.ch[l];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(l=0;l&lt;V.length;l++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S[i+l]=V[l];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else //新子串长度小于原子串时:先将后部左移<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(l=i+V.length;l&lt;S.length+V.length-T.length;l++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S.ch[l]=S.ch[l-V.length+T.length];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(l=0;l&lt;V.length;l++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S[i+l]=V[l];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S.length+=V.length-T.length;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+=V.length;n++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//if<br>
&nbsp;&nbsp;}//for<br>
&nbsp;&nbsp;return n;<br>
}//HString_Replace
<p>4.26
<p>Status HString_Insert(HString &amp;S,int pos,HString T)//把T插入堆结构表示的串S的第pos个字符之前<br>
{<br>
&nbsp;&nbsp;if(pos&lt;1) return ERROR;<br>
&nbsp;&nbsp;if(pos&gt;S.length) pos=S.length+1;//当插入位置大于串长时,看作添加在串尾<br>
&nbsp;&nbsp;S.ch=realloc(S.ch,(S.length+T.length)*sizeof(char));<br>
&nbsp;&nbsp;for(i=S.length-1;i&gt;=pos-1;i--)<br>
&nbsp;&nbsp;&nbsp;&nbsp;S.ch[i+T.length]=S.ch[i]; //后移为插入字符串让出位置<br>
&nbsp;&nbsp;for(i=0;i&lt;T.length;i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;S.ch[pos+i-1]=T.ch[pos]; //插入串T<br>
&nbsp;&nbsp;S.length+=T.length;<br>
&nbsp;&nbsp;return OK;<br>
}//HString_Insert
<p>4.27
<p>int Index_New(Stringtype s,Stringtype t)//改进的定位算法<br>
{<br>
&nbsp;&nbsp;i=1;j=1;<br>
&nbsp;&nbsp;while(i&lt;=s[ 0 ]&amp;&amp;j&lt;=t[ 0 ])<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;if((j!=1&amp;&amp;s[i]==t[j])||(j==1&amp;&amp;s[i]==t[j]&amp;&amp;s[i+t[ 
0 ]-1]==t[t[ 0 ]]))<br>
&nbsp;&nbsp;&nbsp;&nbsp;{ //当j==1即匹配模式串的第一个字符时,需同时匹配其最后一个<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=i+j-2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;else<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;j++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;}//while<br>
&nbsp;&nbsp;if(j&gt;t[ 0 ]) return i-t[ 0 ];<br>
}//Index_New
<p>4.28
<p>void Lget_next(LString &amp;T)//链串上的get_next算法<br>
{<br>
&nbsp;&nbsp;p=T-&gt;succ;p-&gt;next=T;q=T;<br>
&nbsp;&nbsp;while(p-&gt;succ)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;if(q==T||p-&gt;data==q-&gt;data)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;succ;q=q-&gt;succ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;next=q;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;else q=q-&gt;next;<br>
&nbsp;&nbsp;}//while<br>
}//Lget_next
<p>4.29
<p>LStrNode * LIndex_KMP(LString S,LString T,LStrNode *pos)//链串上的KMP匹配算法,返回值为指针<br>
{<br>
&nbsp;&nbsp;p=pos;q=T-&gt;succ;<br>
&nbsp;&nbsp;while(p&amp;&amp;q)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;if(q==T||p-&gt;chdata==q-&gt;chdata)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;succ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q=q-&gt;succ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;else q=q-&gt;next;<br>
&nbsp;&nbsp;}//while<br>
&nbsp;&nbsp;if(!q)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;for(i=1;i&lt;=Strlen(T);i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;next;<br>
&nbsp;&nbsp;&nbsp;&nbsp;return p;<br>
&nbsp;&nbsp;} //发现匹配后,要往回找子串的头<br>
&nbsp;&nbsp;return NULL;<br>
}//LIndex_KMP
<p>4.30
<p>void Get_LRepSub(Stringtype S)//求S的最长重复子串的位置和长度<br>
{<br>
&nbsp;&nbsp;for(maxlen=0,i=1;i&lt;S[ 0 ];i++)//串S2向右移i格<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;for(k=0,j=1;j&lt;=S[ 0 ]-i;j++)//j为串S2的当前指针,此时串S1的当前指针为i+j,两指针同步移动<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(S[j]==S[j+i]) k++; //用k记录连续相同的字符数<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else k=0; //失配时k归零<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(k&gt;maxlen) //发现了比以前发现的更长的重复子串<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lrs1=j-k+1;lrs2=mrs1+i;maxlen=k; 
//作记录<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//for<br>
&nbsp;&nbsp;}//for<br>
&nbsp;&nbsp;if(maxlen)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Longest Repeating Substring length:%d\n&quot;,maxlen);<br>
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Position1:%d&nbsp;&nbsp;Position 
2:%d\n&quot;,lrs1,lrs2);<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;else printf(&quot;No Repeating Substring found!\n&quot;);<br>
}//Get_LRepSub<br>
分析:i代表&quot;错位值&quot;.本算法的思想是,依次把串S的一个副本S2向右错位平移1格,2格,3格,...与自身S1相匹配,如果存在最长重复子串,则必然能在此过程中被发现.用变量lrs1,lrs2,maxlen来记录已发现的最长重复子串第一次出现位置,第二次出现位置和长度.题目中未说明&quot;重复子串&quot;是否允许有重叠部分,本算法假定允许.如不允许,只需在第二个for语句的循环条件中加上k&lt;=i即可.本算法时间复杂度为O(Strlen(S)^2).
<p>4.31
<p>void Get_LPubSub(Stringtype S,Stringtype T)//求串S和串T的最长公共子串位置和长度<br>
{<br>
&nbsp;&nbsp;if(S[ 0 ]&gt;=T[ 0 ])<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;StrAssign(A,S);StrAssign(B,T);<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;else<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;StrAssign(A,T);StrAssign(B,S);<br>
&nbsp;&nbsp;} //为简化设计,令S和T中较长的那个为A,较短的那个为B<br>
&nbsp;&nbsp;for(maxlen=0,i=1-B[ 0 ];i&lt;A[ 0 ];i++)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt;0) //i为B相对于A的错位值,向左为负,左端对齐为0,向右为正<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmin=1;jmax=i+B[ 0 ];<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//B有一部分在A左端的左边<br>
&nbsp;&nbsp;&nbsp;&nbsp;else if(i&gt;A[ 0 ]-B[ 0 ])<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmin=i;jmax=A[ 0 ];<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//B有一部分在A右端的右边<br>
&nbsp;&nbsp;&nbsp;&nbsp;else<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmin=i;jmax=i+B[ 0 ];<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//B在A左右两端之间.<br>
&nbsp;&nbsp;&nbsp;&nbsp; //以上是根据A和B不同的相对位置确定A上需要匹配的区间(与B重合的区间)的端点:jmin,jmax.<br>
&nbsp;&nbsp;&nbsp;&nbsp;for(k=0,j=jmin;j&lt;=jmax;j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(A[j]==B[j-i]) k++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else k=0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(k&gt;maxlen)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lps1=j-k+1;lps2=j-i-k+1;maxlen=k;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;}//for<br>
&nbsp;&nbsp;}//for<br>
&nbsp;&nbsp;if(maxlen)<br>
&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;if(S[ 0 ]&gt;=T[ 0 ])<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpsS=lps1;lpsT=lps2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;else<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpsS=lps2;lpsT=lps1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;} //将A,B上的位置映射回S,T上的位置<br>
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Longest Public Substring length:%d\n&quot;,maxlen);<br>
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Position in S:%d&nbsp;&nbsp;Position in 
T:%d\n&quot;,lpsS,lpsT);<br>
&nbsp;&nbsp;}//if<br>
&nbsp;&nbsp;else printf(&quot;No Repeating Substring found!\n&quot;);<br>
}//Get_LPubSub<br>
分析:本题基本思路与上题同.唯一的区别是,由于A,B互不相同,因此B不仅要向右错位,而且还要向左错位,以保证不漏掉一些情况.当B相对于A的位置不同时,需要匹配的区间的计算公式也各不相同,请读者自己画图以帮助理解.本算法的时间复杂度是o(strlrn(s)*strlen(t))。</p>
<p align="left" style="line-height: 100%; margin-top: 0; margin-bottom: 0"> </p> 
<HR> 
 
<P align=left><B><SPAN  
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 24pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">数据结构辅导站</SPAN><SPAN  
lang=EN-US  
style="COLOR: blue; FONT-FAMILY: Times New Roman; FONT-SIZE: 24pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-spacerun: yes; mso-fareast-font-family: 宋体">&nbsp; 
</SPAN></B><span lang="EN-US" style="font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:宋体;   
mso-bidi-font-family:&quot;Times New Roman&quot;;mso-font-kerning:1.0pt;mso-ansi-language:   
EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA"><a href="index.htm">返回主页</a></span></P></BODY></HTML> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -