版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第1章緒論一、基礎知識題1.簡述下列概念數(shù)據(jù),數(shù)據(jù)元素,數(shù)據(jù)類型,數(shù)據(jù)結(jié)構(gòu),邏輯結(jié)構(gòu),存儲結(jié)構(gòu),算法?!窘獯稹繑?shù)據(jù)是信息的載體,是描述客觀事物的數(shù)、字符,以及所有能輸入到計算機中并被計算機程序識別和處理的符號的集合。數(shù)據(jù)元素是數(shù)據(jù)的基本單位。在不同的條件下,數(shù)據(jù)元素又可稱為元素、結(jié)點、頂點、記錄等。數(shù)據(jù)類型是對數(shù)據(jù)的取值范圍、數(shù)據(jù)元素之間的結(jié)構(gòu)以及允許施加操作的一種總體描述。每一種計算機程序設計語言都定義有自己的數(shù)據(jù)類型?!皵?shù)據(jù)結(jié)構(gòu)”這一術語有兩種含義,一是作為一門課程的名稱;二是作為一個科學的概念。作為科學概念,目前尚無公認定義,一般認為,討論數(shù)據(jù)結(jié)構(gòu)要包括三個方面,一是數(shù)據(jù)的邏輯結(jié)構(gòu),二是數(shù)據(jù)的存儲結(jié)構(gòu),三是對數(shù)據(jù)進行的操作(運算)。而數(shù)據(jù)類型是值的集合和操作的集合,可以看作是已實現(xiàn)了的數(shù)據(jù)結(jié)構(gòu),后者是前者的一種簡化情況。數(shù)據(jù)的邏輯結(jié)構(gòu)反映數(shù)據(jù)元素之間的邏輯關系(即數(shù)據(jù)元素之間的關聯(lián)方式或“鄰接關系”),數(shù)據(jù)的存儲結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)在計算機中的表示,包括數(shù)據(jù)元素的表示及其關系的表示。數(shù)據(jù)的運算是對數(shù)據(jù)定義的一組操作,運算是定義在邏輯結(jié)構(gòu)上的,和存儲結(jié)構(gòu)無關,而運算的實現(xiàn)則依賴于存儲結(jié)構(gòu)。絡數(shù)據(jù)結(jié)構(gòu)在紀計算機中的第表示稱為物啦理結(jié)構(gòu)溫,籮又筐稱存儲結(jié)構(gòu)騎。是邏輯結(jié)宇構(gòu)在存儲器性中怒的映像,包溫括數(shù)據(jù)元素鐮的表示和關般系的表示。孩邏輯結(jié)構(gòu)與屬計算機無關糞。冰算法階是對特定問浙題求解步驟揮的一種描述雨,是尺指令的有限健序列。其中尊每一條指令渾表示刃一個或多個宮操作。一個評算法應該具角有下列特性抓:蹄有窮煎性、確定性姑、可行性、裳輸入和輸出北。書2.遠萌仆數(shù)據(jù)的邏輯及結(jié)構(gòu)分哪幾材種,為什么心說邏輯結(jié)構(gòu)軟是數(shù)據(jù)組織減的主要方面剩?療【解答】數(shù)愛據(jù)的邏輯結(jié)攤構(gòu)分為線性語結(jié)構(gòu)和非線宿性結(jié)構(gòu)。(森也可以分為秩集合、線性小結(jié)構(gòu)、樹形食結(jié)構(gòu)和圖形腹即網(wǎng)狀結(jié)構(gòu)趴)曬。睜邏輯結(jié)構(gòu)是匪數(shù)據(jù)組織的桐某種習“箏本質(zhì)性草”茂的東西:糞(1)邏輯廟結(jié)構(gòu)與數(shù)據(jù)舉元素本身胞的問形蟻式、內(nèi)容無豎關。簽(2)邏輯導結(jié)構(gòu)與數(shù)據(jù)概元素的相對夠位置無關。村(3)邏輯刊結(jié)構(gòu)與所含逆數(shù)據(jù)元素的腐個數(shù)無關。討3.梳驕試舉一個數(shù)指據(jù)結(jié)構(gòu)的例筆子,敘述其勢邏輯結(jié)構(gòu)、益存儲結(jié)構(gòu)、穿運算三方面凳的內(nèi)容。粘【解答】學螺生成績表,冒邏輯結(jié)構(gòu)是姓線性結(jié)構(gòu),找可以順序存吳儲(也可以漠鏈式存儲)券,運算可以洪有插入、刪費除、查詢、棗等等。冰4.民肯簡述算法的潮五個特性,宜對算法設計桃的要求。胖【解答】外算法的五個貢特性是鳥:有窮性、鍬確定性、可家行性、零至勇多個輸入和磁一至多個輸簡出。始對算法感設計的臂要求:行正確性,易卡讀性,健壯椒性,和高的撇時空間效率但(運算速度霉快,存儲空伸間小版)猶。煩5.抱宮設n是正整柱數(shù),求下列相程序段中帶避@記號的語倦句的執(zhí)行次道數(shù)。責(1)i=草1;k=0衫;挖邪剖繞掛找(社2)i=撿1;j=0前;憶慚噸while呢(i<n)喉畫喉尊象帝合窩while薯(i+j<昏=n陸)閱妥盛{k=k+彎50*i;分i++;占@票壁帶觸{壘if牽(i>j)歡j++;哲譯@精握江}絮復答漂沈塵澇撓場晝else惱i++;惜}胳@刪泊(3)x=搏y=0;屈痰霉里珠廁很(4)x黃=91;y糊=100;烤筆息for桶(i=禽0;i<n六;i++)崇@乓駱犬口考while斑(y>0)旦穩(wěn)導for饞(j=0;葉j<n;i塵++)鍛@喇啊郊混煉if蔑(x>10織0)奴偏畏{黃x++;瘦逼裹@全往征切刪{耳x=x-1料0;y-喇-;肺@到積員廳for嗎(k=0;承i<n;i取++)@有桶腥撲肚}黨情方y(tǒng)+岔+;框非@鹽沖每攔帥癥else渣x++;充仆健@拐暮面墨}稍【解答】匹(1)n-買1修侍(2戶)i=撞芳n/2妨j=嬸n/2回(3)n+秤1,n(識n+1),題n悼2場,(n+1隆)n歷2建,n專3務雪(4)10漆0,10砌00削6.理鼠有實現(xiàn)同一鄰功能的兩個壓算法A1和泡A2,其中前A1的時間屆復雜度為T杠l=O(2原n曲),A2的窮時間復雜度杯為T2=O絞(n講2就),僅就時真間復雜度而旦言,請具姑體分析這兩驅(qū)個算法哪一做個好。勒【解答】津?qū)λ惴ˋ1勁和A2的時襖間復雜度T昨1和T2取碌對數(shù)喉,得nlo籍g化2司和2log乎n粗。顯然,當眾n<4時,際算法A1好合于A2;當大n=4時,編兩個算法時射間復雜度相識同;當n>堅4時,傷算法A2好拌于A1。姑7.幸糧選擇題:算后法分析的目辭的是(樸)狗A、找出數(shù)蘆據(jù)結(jié)構(gòu)的合兵理性挨B鍵、研究算法品中的輸入和像輸出的關系京C、分析算污法的效率以雕求改進稻D、棍分析算法的江易懂性和文同檔特點【解答】C執(zhí)二、算法設切計題浙8.錘溉已知輸入x仰,y,z三沒個不相等的臘整數(shù),設計序一個挨“閣高效象”臣算法,使得昂這切三個數(shù)按從癥小到大輸出竭。使“刺高效最”近的含義是用鉆最少的元素炸比較次數(shù)、命元素扣移動次數(shù)和促輸出次河數(shù)。史vo笑idBe肆st()劣{//按序扣輸出三個整撈數(shù)的優(yōu)化算獎法貴inta萬,b,c漲,t;舅scanf麗(失“壩%d%d序%d源”趣,&a,&握b,&c)調(diào);禍if(a>社b)召{缺t=a;藥a=b;材b=t:浴}羨//a和b邊已正序游if(b>扶c)妄{t鐮=c;c繼=b;湊堅宰//里c已到位錦不if(a>澡t){b輩=a;a吧=t;}揉//a和b床已正序耽暴else磚b=t;}塑print校f(櫻“僚%d,%d好,%d\n鐵”三,a,b,理c);怨//最佳加2次比較,判無移動;最艱差3廚次比較,7族個賦值}遣9.況許在數(shù)組A[增n]中查找四值為k的元揉素,若找到敘則輸出其位高置i(1厘≤剩i少≤沈n),否則抗輸址出0作為標洗志。設計算萬法求解此問杏題,并分析創(chuàng)在最壞情況拼下的時間復匹雜度。顫【題目分析寄】巡從后向前查譜找,若找到游與浪k鏟值相同的元拔素則返回其高位置,否則喚返回加0饅。肅intS相earch燒(Elem蒜Type染A[n+1騎],El著emTyp賓ek){i=n;砍wile狐(i>=1損)&&(A銅[i]!=柱k))i敗--;割if(i遞>=1)老ret目urni現(xiàn);麗else上retu否rn0;}田當查找不成冷功時,總的爬比較次數(shù)為蜂n+1證次,榴所以最壞情洲況下時間復謠雜度為歌O(n)檔。漁第慈2幅章箏忘線性表桿一、殲基礎知識題攜2.1試呆述頭指友針、頭結(jié)點卷、元素是結(jié)點、首元怨結(jié)點的區(qū)別蒜,說明頭指鹿針和頭結(jié)點即的作筒【解答】彎指向鏈表第民一個結(jié)點鴿(或為頭結(jié)帆點或為首元待結(jié)點)覺的指針稱為誕頭指針稠。柜“誕頭指針容”熱具有標識一宏個鏈表的作胸用,所以經(jīng)齊常用頭指針霞代表鏈表的冠名字,如鏈伙表L既是指痕鏈表的名字拖是L,也是萄指鏈表的第屢一個結(jié)點的偉地址存儲在孟指針變量L糟中,頭指針蝕為垂“宏NULL甜”挽則表示一個底空表。久有時,童我們在愚整個線性鏈糞表的第一個步元素結(jié)點之膨前加入一個農(nóng)結(jié)點,稱為冤頭結(jié)點著,它的數(shù)據(jù)摟域可以不災存儲任何信逆息(也可以奉做監(jiān)視哨或埋存放線性表蠶的長度等附嘉加信息),說指針域中存溜放的是第一粒個數(shù)據(jù)結(jié)點質(zhì)的地址,空蠻表時為空。博符“糟頭結(jié)點袍”忌的加入,使煌插入和刪除勸等操作方便牢統(tǒng)一。弱元素結(jié)點即歷是數(shù)據(jù)結(jié)點嗓,至少包括取元素自身信父息和其后繼輛元素的地址寒兩個域。板首元結(jié)點是春指鏈表中第捧一個數(shù)據(jù)元灶素的結(jié)點;惕為了操作方閣便,通常在蔽鏈表的首元安結(jié)點之前附押設一個結(jié)點盯,稱為頭結(jié)返點。軋2.2分析淋順序存儲結(jié)儲構(gòu)和鏈式存孫儲結(jié)構(gòu)的優(yōu)憤缺點,說明遮何時應該利器用何種結(jié)構(gòu)脈。秋【解答】銷①君從空間上靜來看,當線酸性表的長度貢變化較大,蓄難以估計其半規(guī)模時,選進用動態(tài)的鏈丙表作為存儲妖結(jié)構(gòu)比較合意適,但鏈表錦除了需要設誼置數(shù)據(jù)域外捏,還要額外檢設置指針域桑,因此當線繁性表長度變隱化不大,易愈于事先確定對規(guī)模時,為慌了節(jié)約存儲雙空弊間,宜采用輸順序存儲結(jié)徐構(gòu)。祥②酬從時間上看鞠,順序表具鈴有按元素序綠號隨機訪問堪的特點,在扎順序表中按平序號訪問數(shù)咬據(jù)元素的時次間復雜度為妻O(1);賭而鏈表中按法序號訪問的賠時間復雜度哥為O(n)芹。所以如果很經(jīng)常按序號土訪問數(shù)據(jù)元歸素,使用順鼓序表優(yōu)于鏈凱表。藏在順序表中背做插入刪除雜操作時,平藏均移動大約堵表中一半的貝元素,因此宿n較大時順碼序表的插入每和刪除效率臭低。在箭鏈表中作插啦入、刪除,蒙雖然也要找辭插入位置,笛但操作主要糟是比較操作堪。從這個角爹度考慮顯然目鏈表優(yōu)于順頌序表。游總之,兩種區(qū)存儲結(jié)構(gòu)各領有長短,選醬擇那一種存稻儲結(jié)構(gòu),由白實際問題中胃的主要因素碗決定?;?.3分握析族在順序存儲痛結(jié)蜜構(gòu)下插入和武刪除結(jié)點時尾平均需要移喬動多少個結(jié)草點。錫【解答】平哀均移動表中幫大約一半的蔥結(jié)點,插入叼操作平均移燥動拆劃個結(jié)點,刪蠅除操作平均欲移動裕盛個結(jié)點。具騾體移動的次瞇數(shù)取決于表貿(mào)長和插入、哀刪除的結(jié)點否的位置。注2.4為公什么在單循據(jù)環(huán)鏈表中常伴使用尾指針愚,若只設頭課指針,插入贏元素的時間豈復雜度如何喝?廳【解答】單允循環(huán)鏈表中跑無論設置尾酬指針質(zhì)還是頭指針圖都可以遍歷疏表中任一個晚結(jié)點樣。設置尾指薯針時,若在更表尾進行插吹入元素或刪葛除第一鍬元素,操作這可在O(1踩)時間內(nèi)完漲成;若只設深置頭指針,蒼表尾進行插你入或刪除操己作,需要遍亭歷整個鏈表抹,時間復雜雞度為O(n窄)費。產(chǎn)2.5在帆單鏈表、雙洽鏈表、單循漲環(huán)鏈表中,然若知道指針財p指向某結(jié)釣點,能否刪棕除該結(jié)點,惑時間復雜度樣如何?禿【解答:】狹以上三種鏈景表中,若旨知道指針p僅指向某結(jié)點觀,都能刪除澡該結(jié)點繡。雙鏈表刪慎除終p望所指向的結(jié)側(cè)點的時間復跟雜度為晃O(1)驕,而單鏈表辜和單循環(huán)鏈互表上刪除鵲p象所指向的結(jié)忍點的時間息復雜度均為賄O(n)誠。括2.6下胃面算法的功艱能是什么看?節(jié)Linke頌dList昏Unkn艦own(L西inked炊List舍la)育{僻LNode敗*q,*傍p;威否if央(la&奮&la-胖>next絲)屬熱砌{q=la腎;la=公la->n擾ext;回p=la;有非纏while乳(p->n衡ext)牲p=p->胡next;籃駕迫p->ne消xt=q;學q->n吧ext=n蛾ull;調(diào)婆鋼}只真移retur恢n笑la;}扮【解答】將或首元結(jié)點刪晶除并插入到免表尾(設鏈銀表長度大于善1濟)。澇2.7源選擇題:在爺循環(huán)雙鏈表泛的*p結(jié)點痛之后插入*遭s結(jié)點的操們作是(駕)旋la、p-徑>next牽=s;請s->pr罰ior=p剩;略p營->nex叢t->pr雷i聞or=s;道s->尸next=嘉p->ne據(jù)xt;鹿B、p->勢next=禽s;p寬->nex暑t->pr姻ior=s座;s-展>prio吸r=p;踩委s->位next=想p->ne籮xt;磚lc、s-與>prio夸r=p;政s->ne赤xt=p-孔>next籌;p差->nex野t:=s;激樂p-翅>next鍋->pri貞or=s;費卵D、s->已prior俊=p;s熊>next蛛=p>ne扎xt;摩p>蹦next-尚>prio氏r=s;窯p->桑next=紛s;【解答】D互2.8選放擇題:若某稈線性表最常龍用的操作是球存取任一指調(diào)定序號的元乓素和在最墨后進行插入揪和刪除運算父,則利用(榆)水存儲方式最咸節(jié)省時間。里la.順序各表B袍.雙鏈表廣lc.彎帶頭結(jié)點的丟雙循環(huán)鏈表紅D雕.單循環(huán)鏈炒表疊【解答】糾la薪二、算法設握計題浙2.9乳設恩ha留和最hb登分別是兩個莊帶頭結(jié)點的劇非遞減有序朵單鏈表的頭陣指針,試設登計算法,幻將這兩個有細序鏈表合并摩成一個非遞顧增有序的單兼鏈表。要求口使用原鏈表矛空間,表中校無重復數(shù)據(jù)渠。屬【題目分析避】巾因為兩鏈表臣已按元素值或非遞減蚊次序排列,紹將其合并散時,均從第姐一個結(jié)點起屑進行比較,孩將小的鏈入捆鏈表中,同抄時后移鏈表蜓工作指針,狂若遇值相同踩的元素,則需刪除之。該赤問題要求結(jié)包果肯鏈表按元素看值姑非遞增粉次序排列,番故在合并的辮同時,將鏈辱表結(jié)點逆置者。先Linke遞dList鞏Unio養(yǎng)n(Lin彎kedLi秤st徑儲ha,hb滋)旱膊∥隔ha,hb苗分別是帶頭筆結(jié)點的兩個頭單鏈表的頭拋指針,鏈表呢中的元素值社按遞增序排監(jiān)列鈴∥多本算法將兩箱鏈表合并成助一個按元素飯值遞減次序躺排列的單鏈睬表,并刪除滔重復元素洞{p浮a=ha-株>next朗;筋藍∥吹pa是鏈表售ha的工作赤指針贊pb=hb予->nex歲t;嗎織∥淺pb是鏈表賊hb停的工作指針由h越a->ne戲xt=nu秋ll;肚∥街ha作結(jié)果弱鏈表的頭指進針,先將結(jié)縱果鏈表初始禿化為空粗謹w疑hile嫁(pa!=榨null畫&&pb澇!=nul達l)竊∥盟當兩鏈表均餐不為空時作得慣{毯while養(yǎng)(pa->旱next敵&&pa號->dat帶a==pa座->nex戚t->da嘩ta)棒敵獲{u=pa倉->nex漲t;pa隨->nex巷t=u->廢next;熔free遵(u)}浙∥繁刪除pa鏈尿表中的重復濱元素期while豆(p乓b->ne抗xt&&時pb->哀data=擊=pb->瞎next-株>data臂)版于帆{u=助pb->n融ext;吧pb->n范ext=u囑->nex繼t;fr帳ee(u)害}商∥抖刪除pb鏈埋表中的重秧復元素幼駐只if吊(pa->雖data<勉pb->d燃ata)末漸泉{r=pa脈->nex窮t;柿汽犬∥斥將pa的誼后繼結(jié)點暫木存于r鵝呼吵pa->仙next=磨ha->n律ext;紫窄∥笨將pa結(jié)點夜鏈于結(jié)果表手中,同時逆找置暴ha->n經(jīng)ext=p婆a;誤pa=r;復棗則久剪∥痕恢復pa為洲當前待比較萍結(jié)點}齊蒼驚腔else襪i拋f毅(pb-狼>data閱<pa->險data)督{r=pb礦->nex它t;旅著登∥役將pb雕的后繼結(jié)點僻暫漂存于r廊pb->n緒ext=h散a->ne隨xt;趁直∥顧將pb結(jié)點壟鏈于結(jié)果表蒸中,同時逆袍置客ha->n睡ext=p摔b;特pb=r;孟陜嬸恒件∥也恢復pb為華當前待比較編結(jié)點}譯菊鑼般蠢else從{u=pb垂;pb=p勾b->ne毀xt;fr肚ee(u)笨}覆∥修刪除鏈表p栽b和pa中惡的重復元素機詢打}/返/復whil驟e公(pa!=碧null榮&&pb槳!=nul牛l)鳳刺句敬if應(pa)戶pb=pa墊;酷頃∥它避免再對p炸a寫下面的曾while匯語句老售省懂while酸(pb!=鄙null)碗制∥略將尚未到尾腹的表逆置到鈔結(jié)果表中養(yǎng)憶行{r=樣pb->n埋ext;駛pb->n忌ext=h叨a->ne倡xt;h迫a->ne亮xt=pb妖;pb=謹r;}猴衣電retu聾rn低ha券災}嫩∥疤算法Uni怖on結(jié)束鬧2.10化羽河尼設la是槳一個雙向循任環(huán)鏈表,其鬼表中元素遞訪增有序。試刻寫一算法插朽入元素x,閑使表中元素乓依然遞增有隸序。喜【問題分析扇】雙向鏈表趴的插入與單設鏈表類似,型但需修改雙扔向指針。充婦引DLink當edLis著tD輩Inser合t(DLi寧nkedL關istl滋a,El拐emTyp殃ex)測孤本∥還在譽遞增有序的鎮(zhèn)雙向循環(huán)鏈松表la中插投入元素x,用使表中元素群依然遞增有敵序斤拋{p=股la->n奶ext;捷涌辦∥母p指向第一撕元素死礎la報->dat摧a=Max熱ElemT衛(wèi)ype;琴∥炕MaxEl杠emTyp元e冬是和拆x同類型的閃機器精最大值,用差做監(jiān)凍視哨確片聾while限(p->d損ata<x更)饑∥緩尋找插入妨位置訊p狠=p->n介ext正腿;泡雞s=游(DLNo弱de*)精mallo否c滿(鷹sizeo燕f失(DLNo群de傳));慨∥隨申請結(jié)點空拿間臨痰s-止>data蹤=x;互細s-武>prio韻r=p->猴prior魂;s->削next=霜p;沃身∥貨將插入結(jié)點疤鏈入鏈表率p->pr伯ior->列next=啟s;p-您>prio辨r=s;拖禍}各2.11鵲焰皺狗設p指向頭破指針為la濱的單鏈表中尾某結(jié)點,榆試編寫算法飄,刪除結(jié)點紐*p的直接會前驅(qū)結(jié)點盾。虜【題目分析毅】設*p是捉單鏈表中某應結(jié)點,刪孝除結(jié)點*p吸的創(chuàng)直接前驅(qū)結(jié)宮點,震要找到*p蹤的前驅(qū)結(jié)點馳的前驅(qū)*p殃re。進行球如下操作:東u=pre伴->nex為t;控pre->擺next=省u->ne羅xt;fr痕ee(u)鐮;挽哲Linke咳dList低Link駝edLis但tDel(載Linke掠dList弦la,L紐Node玉*p)去{籌∥雅刪除單鏈表期la上的結(jié)給點*p的直象接前驅(qū)結(jié)點炊,假定*p幕存在步pre=l返a;悟if罰(pre-漿next=仔=p)尊print噴f(糾“企*p今是鏈表第一欠結(jié)點懇,資無前驅(qū)犧\n哨”恥)積炭;exi抗t風(0)蔬廁;}底燃報while姥(pre-頃>next醬->nex導t!=p答)脖妨技pre=p林re->n典ext;董u=pre拒->nex違t;俯pre->刺nex趁t=u->善next;駕free作(u);私retur耀n睡(la);}漸欲騰生晴呈2.12所愁社知設計一算法況,將一個用耳循環(huán)鏈表表猴示的稀疏多古項式分解成鴿兩個多項式輩,使這兩個縱多項式各自烈僅有奇次冪項或偶次冪項床,并要求利泥用原鏈表中是的結(jié)點空間飄來構(gòu)造這兩笛個鏈表。樣【題目分析順】設循環(huán)鏈闊表表示的多冷項式的結(jié)點抖結(jié)構(gòu)為:仙塑type抱defs水truct傾node表渡作{in倡tpow透er;屑代成∥續(xù)冪殊涉服floa劃tcoe慈f眉;棟束臂∥懶系數(shù)南躲面E盾lemTy煙peot躍her;撇箱∥臟其他信息年糕根stru匹ctno投de*n救ext;發(fā)呈∥掌指向后繼的毀指針別放撈}PNod歪e,*Po寫lyLin害kedLi狠st;豆則可以從第伐一個結(jié)點開縱始,根據(jù)結(jié)音點的冪是奇醫(yī)數(shù)或偶數(shù)而恰將其插入到跳奇次冪或偶粗次冪項的鏈差表中。假定蔬用原鏈表保鎖存偶次湊冪,要為奇歲次冪的鏈表兆生成一個表撓頭,為了保組持鏈表中結(jié)肆點的原來順過序,用一個余指針指向奇湊次冪鏈表的膚表尾,注意蘆鏈表分解時拼不能晌“狀斷鏈腔”螺。郊void紗Poly賣Dis(P俘olyL閣inked端List邁poly)貪∥勤將poly耗表示的多項垮式鏈表分解擺為各含乘奇次冪或偶站次冪項的兩亮個循環(huán)鏈表根{Poly挪Linke迫dList害poly爪2=(Po貿(mào)lyLin局kedLi貌st)岸mallo藏c恨(遷sizeo交f代(PNod練e));脈膠渠景曠∥攀poly2沃表示只含完奇次冪的多屠項式必r2=p選oly2;矮黎獅∥醉r2是只含寺奇勉次涉冪的多項式僅鏈表的尾指老針豐r1=p遞oly;君辮抖∥口r1是只含敬偶次吧冪的倍多項式竹鏈表當前結(jié)雨點的前驅(qū)結(jié)吊點的指針掘p=po哥ly->n積ext;起網(wǎng)∥耗鏈表帶頭結(jié)搖點,p斗指向第一個甘元素便瓦while展(p!=p要oly)毀惹if央(p->p士ower到%2)鋒∥搏處理直奇次冪輕淋{r=p祥->nex夸t;怪垮∥畫暫存后繼檔無r2-哄>next撫=p;部∥施結(jié)點鏈入輩奇次冪鏈表魚r2=p;易脅役∥藥尾指針后移磁掃p=r托;劇據(jù)建∥群恢復當前待腸處理結(jié)點如管}笑獵el夸se歇址∥蹈處理愚偶次冪后喊{r1->曲next=闊p;r1骨=p;p姓=p->n撓ext;}要儲}愿r-澡>next逃=poly梅2;r1羞->nex箱t=p憲oly;凈惕∥顯構(gòu)成循環(huán)鏈繪表魯穿}門∥淹PolyD窯is馳2.13賊下慧怪以帶頭結(jié)戚點的雙向鏈榆表表示的線程性表L=(舌a物1疤,a棗2境,悔…煉,a企n酒),試寫一駱時間復雜度技為O(n)輸?shù)乃惴?,將亂L改造為L訓=(a地1絕,a睬3稼,然…富,a擺n像,曉…躁,a漲4煙,a礎2室)。?!绢}目分析亞】分析結(jié)果膨鏈表,易見斤鏈表中位置癢是奇數(shù)的結(jié)杜點保持原順貴序,而位置青是偶數(shù)的結(jié)望點移到奇數(shù)瘦結(jié)點之后,么且以潤與原來相反腿的順序存放荒。因此,可濁從鏈表第一稠個結(jié)點開始諸處理,位置暖是奇數(shù)的結(jié)命點保留不動在,位置是偶攪數(shù)的結(jié)點插三入到鏈表尾敏部,并用一綁指針指向鏈慈表尾,以便樣對偶數(shù)結(jié)點箭“砍尾插入份”亭。滲DLink略edLis著tDI灘nvert疤(DLin壘kedLi貌stL)穗朋捕∥誓將翠雙向循環(huán)鏈燕表L位置是刪偶數(shù)的結(jié)點打逆置插入到晌鏈表尾部落刪{p=烈L->ne到xt;文僵行∥辯p團指向第一元棄素南翅Q=真p->pr塌ior;塌猛∥穗Q指向最后絮一個元素覆幣pr爸e=L裝摸;棕壯∥籮pre指向薪鏈表中位置想為奇逝數(shù)的結(jié)點的粥前驅(qū)胳鼻r=遠L跳桃;箭籍煌繭∥曠r指向鏈表仗中偶深數(shù)結(jié)點的尾就結(jié)點盒查i=腎0脅該;拒睛續(xù)∥獻i記錄結(jié)點稻序號費潛芹while尼(p斧黑!=Q)坑紙∥揚尋找插入位策置饑{i++霉棄;脆if株(i%2)踏卷∥罰處理序號為滿奇數(shù)的結(jié)點浮{p->p僵rior=秩pre激云;pre-責>next毅=p棗精;pre=圖p;p=薯p->ne鑒xt;}畢else扛狀無∥稈處理序號為效偶數(shù)的結(jié)點迫{u呈=p煩冒;莫∥那記住當前結(jié)桑點哥p悉=p->n銷ext耐稅;肢∥樓p續(xù)指向下口個待處斬理結(jié)點塑u與->pri透or=r-權>prio易r;卸
∥我以下劈4安個語句將結(jié)按點密插入鏈表尾舊u株->nex旁t=r;周r應->pri傭or->n購ext=u倍;擴拆r->pr劑ior=氏u;幅r致=u;價怒黎∥攀指向新的表綁尾}}護2.14晚錄創(chuàng)疑設單向鏈表尊的頭指針為肝head,椅試設計算法模,將鏈表按騙遞增的順序修就地排序。能【題目分析定】州本題中的晝“豐就地排序吳”堆,可理解為刷不另辟空間野,這里利用罵直接插入原麗則把鏈表整少理成遞增有奇序鏈表。筑Linke活dList異Link竭List初Inser籃tSort留(Link拘edLis細thea講d)掀藍∥仙head是幫帶頭結(jié)點的悲單鏈表,本短算法利用直喘接插入原則象將鏈表整理分成遞增的有勝序鏈表換{愿if愚(head濃->n沈ext!=舊null)像沒∥勾鏈表不為空就表盡{p譯=head盆->nex慨t->ne套xt;連駝∥驢p指向第一崗結(jié)點的后繼抖head-稅>next支->nex摟t=nul耳l;?!位闹苯硬迦朐談t認為第一射元素有序,磨然后從第二紹元素起依次豬插入癢while披(p!=n欄ull)予{r=嬸p->ne職xt;嬌幫劣∥夾暫存p的后編繼鎮(zhèn)q=狀head;減煎wh成ile判(q->n劈ext&遠&q->鉤next-秘>data導<p->d繪ata)閱q=伏q->ne巧xt;旱∥喂查找插入位摧置輛p-霜>next掌=q->n驟ext;鴉籍∥蔑將p結(jié)點鏈紛入鏈表可q-檢>n胡ext=p忽;膽p=渠r;}}}提2.15潮稍玉屬已知遞增質(zhì)有序的三個摧單鏈表分別狀代表集合A業(yè),B和C,煌設計算法實倉現(xiàn)A=A禽∪致(B艷∩按C),并使殺結(jié)果鏈表仍殿保持遞增。性要求算法的看時間復雜度御為O(|A活|+|B|容+|C|)塌。其中,|悼A|為集合銅A的元素個牧數(shù)。沫【題目分析服】烏本題首先求奸B和C的交敗集,即求B脅和C店中共有元素拒,再與A求迎并集,同時逮刪除匆重復元素,蔽以保持結(jié)果撫A遞增。嚴Linke冠dLi即stun斥ion(L侵inked舒List猾A,B,C航)意∥簡A、B和C寨均是帶頭結(jié)燒點的遞增有差序的單鏈表臣,本算法實濕現(xiàn)A量=倒A勇∪礦(B置∩昏C)悄∥飽使結(jié)果表A嫁保持遞增有拘序涉{pa=A陶->nex勉t;pb=嚼B->ne息xt;pc杜=C->n爭ext;勾∥踏設置三個工腦作指針惱pre=承A;狡∥薯pre指向賣結(jié)果鏈表中勇當前待合并叨結(jié)點的前驅(qū)窗A->d何ata=M絞axEle視mType燙;防∥禍同類型元素中最大值,起番監(jiān)視哨作用張while獅(pa|待|pb奶&&pc眉)廁{厘w屬hile姓(pb&釀&pc)婆尖if趟(pb->乏data<壟pc->d利ata休)pb=火pb->n選ext;柿疲else鄙if追(pb->國data>咸pc->始data)繼pc=p決c->ne損xt;上簡左else狐break歌;矩∥恒B表和C表贈有公共元素樸兆if叔(pb&仰&pc)培傅{飲while崇(pa&則&pa-泡>data落<pb->朗data)罰∥辣先將A中小全于B,C公胞共元素部分侮鏈入膚雄{p今re->n蛛ext=p舌a;pre仍=pa;p授a=pa-盟>next宵;}椒化歪并if趨(pre-列>data虧!=pb-鍋>data鉤)斥{pre-割>next睛=pb;逆pre=p傭b;pb=爺pb->n掉ext;p墊c=pc-耽>next掌;}媽奸館else杠{pb=p娘b->ne你x身t;pc=雞pc->n蘇ext;}皮∥喪若A中已老有B,C公陡共元素,則千不再存入結(jié)僻果表呢鄉(xiāng)}永}增∥致whil煤e(pa|斬|pb&&膏pc)晨磨if堅(pa)勵pre->咬next=膜pa;坡else扁pre-把>next業(yè)=null結(jié);題∥稼當B,C無判公共元素,獎將A中剩余屆鏈入作}霜∥內(nèi)算法Uni障on結(jié)束敬2.16便密鞭毒朝順序表la柜與lb非遞階減有序,順閑序表空間足修夠大。試設熊計一種閣高效算法,致將lb中元溜素合到la歲中,使新的捕la的元素它仍保持非遞枯減有序。高時效指最大限期度地避免移歸動元素。消【題目分析丹】狼順序存儲結(jié)響構(gòu)的線性表缸的插入,其間時間復雜度模為O(n)腹,平均移動搭近一半的元腰素。線性表錯la和lb言合并時,若柄從第一個元刃素開始,一繩定會造成元弊素后移,這閥不符合本題娃“瀉高效算法匠”森的要求。應旱從線性表的朱最后一個元牙素開始比較掘,大者放到乘最終位置上獻。設兩線性擋表的長度各圓為m和n集,則結(jié)果表晶的最后一個水元素應在m葵+n位置上企。這樣從后夏向前,直到悉第一個元揮素為止。致SeqLi催st電甲Union鞭(SeqL只istl果a,Se濁qList攔l沃b)德∥總l禿a和lb是凳順序存儲的奔非遞減有序攤線性表,本浪算法將lb恰合并到la閉中,元素仍舟非遞減有序馳托{m恥=la.l逆ast;n笨=lb.l烏ast;嫌∥乒m,n分別律為線性表l甜a和lb的埋長度域膀k持=m+n-防1;蛾?!味蝛為結(jié)果線配性表的工作半指針(下標閘)劫祝i寨=m-1;巴j=n-1更;花∥略i,j分別甜為線性表l域a和lb的趕工作指針(漆下標)佩釋都while葉(i>=0四&&j匯>=0)焦混輕兇if延(la.d槽ata[i且]>=lb趨.data兔[j])款la.da律ta[k姥--]=l言a.dat互a[i--甚];點品然防else挑la.腔dat光a[k--高]=lb.間data[眠j--];惕追辮while蜻(j>=0脈)la.已data[識k--]=糖lb.da挽ta[j-疲-];銷駐l亞a.las浩t=m+n沾;軋狀retur脂n撐la完;}溉素【算法討論畏】錯算法中數(shù)據(jù)借移動是主要匪操作。在最幣佳情況下(塘lb的最小奸元素大于l俘a的最大元捏素),僅將燥lb的n個選元素移(拷示貝)到la壞中,時間復輝雜度捏為O(n)斯,最差情況后,la的所棟有元素都要沫移動,時間墾復雜度為O起(m+n)促。因數(shù)據(jù)合洗并到la中述,所以在退觀出第一個偉while播循環(huán)后,只波需要一個蹲while膝循環(huán),處理孔lb中剩余否元素。第二政個玉循環(huán)只有在削lb波有剩余元素宇時才執(zhí)行,碑而在la有兄剩余元素時喊不執(zhí)行麥。本算法吩“豪最大限度的灌避免移動元練素墊”鋪,是須“泡一種高效算幅法哄”么。學2.17盛脂備害已知非空線描性鏈表由h駐ead指出殘,試寫一算仔法,將鏈表吳中數(shù)據(jù)域值燒最小的那個綁結(jié)點移到鏈籍表的最前面銳。要求:不胖得額外申請瞞新的鏈結(jié)點惰。糊【題目分析悟】盾本題要求撈將鏈表中數(shù)銀據(jù)域值最小丈的結(jié)點移無到鏈表的最涂前面。首先銜要查找最小高值結(jié)點。召將其移到鏈仙表最前面,壞實質(zhì)上是將復該結(jié)點從鏈飼表古上摘下(不梁是刪除并回質(zhì)收空間),攝再插入到鏈捧表的最前面竄。循Linke夾dList養(yǎng)De刻linse番rt(Li耗nkedL極ist損head)移∥遇本算法將非仁空線性鏈表羽head中零數(shù)據(jù)域值最憐小的那個結(jié)面點移到鏈表宣的最前面逼{p=he奉ad->n圣ext;愁∥代p是鏈表的柿工作指針撞pre=h能ead;泥筑∥委pre指向鐵鏈表中數(shù)據(jù)染域最小值結(jié)背點的前驅(qū)轉(zhuǎn)q=p;賀沒拼∥余q指向數(shù)據(jù)挪域最小值結(jié)仇點,初始假場定是第一結(jié)猾點娘while我(p->祝next)搭確{涂if突(p->n候ext->虹data<針q->da完ta){p花re=p;稱q=p->疤ne超xt;}雪∥爹找到新的最屑小值結(jié)點尤p=扯p->ne歷xt;}限if叔(q!=h揉ead->謊next)裝沈∥唐若顧最小值是第吐一元素結(jié)點猜,則不需再銅操作窩{pre-游>next裕=q->n發(fā)ext;效獻∥構(gòu)將最小值結(jié)淋點從鏈表上譽摘下信q->ne逃xt=he妻ad->n營ext;貧∥羊?qū)結(jié)點插防到鏈表最前魂面掩head-思>next噴=q;賣但}爛}前∥渡Delin擔sert頂2.18邁慰設la是擊帶頭結(jié)點的蛋非循環(huán)雙向鋤鏈表的指針葵,其結(jié)點中奧除有聲prior秤,data賣和next親外,還有一忍訪問頻度域忠fr兄eq,其值濾在鏈表初始刷使用時搬為0。當在見鏈表中進行記ListL茅ocate盾(la,x弦)運算時,繪若查找失敗會,則在表尾誼插入值為x補的結(jié)點;若稻查找成功,拌值椅為x的結(jié)點良的freq溜值增1,并緒要求鏈表按襖freq域急值非增(遞齊減)的順序偵排列,且最尋近訪問的結(jié)鍛點排在頻度陶相之同的結(jié)點的排后面,使頻冶繁訪問的結(jié)盜點總是靠近齒表頭。試編酬寫符合上述跟要求的Li竄stLoc越ate(l嫩a,x)運澤算的算法,穗返回找到結(jié)舊點的指針。轉(zhuǎn)蔥【題目分析紙】輩首先在雙向副鏈表中查找麥數(shù)據(jù)值為x祖的結(jié)點,查銹到后,將結(jié)債點從鏈表上胳摘下,夢然后再順結(jié)慶點的前驅(qū)鏈喜查找該結(jié)點懶的位置。交膽綁DLink排List綁連ListL否oc丟ate叢(D星Linke煮dList世L,El座emTyp辟ex)臥∥腎L是帶頭妄結(jié)點的按訪灶問頻度遞減原的雙向鏈表閃,摔本算法先缸查找數(shù)據(jù)x魯∥務查找成功時筒結(jié)點的訪問況頻度域增1間,最后將該最結(jié)點按頻度傷遞減插入鏈蓄表中會{DLin從kList重p=L-評>next職,q;爺∥跳p為L表的嘗工作指針,掙q為p的前遲驅(qū),用于查除找插入位置防頓while補(p&&戶p->d翁ata!=議x)p=可p->ne丸xt;倡∥剃查找值為渠x的結(jié)點宜軌if臥(!p)堡{prin論tf(衡“碧不存在所查葛結(jié)點\n班”爆);ex監(jiān)it(0)不;}步程else氧{p-義>freq還++;犯短把坦阻∥水令元素值奴為x的結(jié)點命的freq小域加1縱趴緩p->n卵ext->賢prior嚴=p->p鏈rior;隆濤∥名將p結(jié)點船從鏈表上摘嗎下圓童p勞->pri際or->n拔ext=p朝->nex飼t;廈q=p->本prior旋;勢厲鎮(zhèn)∥貍以下查找秧p結(jié)點的插召入位置桐行女while釘(q!=績L&&濃q->fr謎eq<p-腫>freq桐)q=q殖->pri市or;池億噴p->怎next=掙q->ne管xt;q攀->nex給t->pr佛ior=p訓;浴∥湯將p林結(jié)點插入招立p款->pri庭or=q;頌q->n副ext=p大;擋庸鄉(xiāng)}弟刊retur馬n攤(p);架仗∥徹返回值為x賤的結(jié)點的指吼針僚}腸∥呆算法結(jié)束玉冤2.19搜廊凳播三個帶頭結(jié)獅點的線性鏈妹表la、l陜b和lc中節(jié)的結(jié)點均依封元素值自小嘗至大非遞減蠢排列(可能躬存在兩個以單上值相同的淘結(jié)點),編晃寫算法對l耕a表進行如竄下操作:使榜操作后的l看a中僅留下盯三個表中均撇包含的數(shù)據(jù)引元素的結(jié)點爸,且沒有值底相同的結(jié)點落,并釋放忍所有無用結(jié)訴點。限定算般法的時間復筐雜度為O(苦m+n+p貿(mào)),其中m梢、n和p分閣別為三個表稻的長度。充【題目分析展】捷留下三個扭鏈表中公共和數(shù)據(jù),首先都查找兩表l蔥a和B中公播共數(shù)據(jù),再保去lc中找躍有無該數(shù)據(jù)輸。要消除重晚復元素,應趣記住前驅(qū),曲要求時間復記雜度O(m遠+n+p)躁,在查找每唇個鏈表時,本指針不能回爆溯。督Linke如dList獸lcom觸mon(L片inked檢List溜la,lb怠,lc)詢∥噸本算法使l呈a表留下l泛a、lb和燒lc三個非故遞減有序表溫共同結(jié)點,喊無重復元素臣{pa=l歌a->ne相xt;pb曉=lb->怎next;具pc=lc謠->nex拌t;傭∥船p至a,鼓pb和pc烤分別是la圾,lb和l蜜c三個表的斑工作指針翅pre=l玉a;孔la->d宗ata=M暖axEle嗎mType凍嘉∥皆pre是l穴a表當前結(jié)屋點的前驅(qū)結(jié)佩點的指針,用頭結(jié)點作監(jiān)民視哨狀while珠(pa&鞠&包pb&桂&衣pc)坡所∥斤當la,l舌b和lc表洞均不空時,懸查找三表共壇同元素核{農(nóng)while尼(pa&&浸pa->d子ata==險pre->倒data)飄晉{u=pa傻;pa=率pa->n惹ext;爪free(則u);}/協(xié)/刪la中爽相同元素斤while純(pb&抵&pc)稀民凡if巾(pb->辭data<端pc->d礦ata)p匆b=pb-聾>next發(fā);誕∥猛結(jié)點元素值懸小時笨,后移指針金哲怨else啞扭if綢(pb->種data>伯pc->d昂ata)p緣c=pc-丟>next猶;坊捆瑞el察se敞brea伸k;鴨∥城處理lb部和lc表元坐素值相等的司結(jié)點結(jié)i拔f(pb型&&pc防)傲{書while殼(pa&午&pa-桃>data很<pc->李data)片{u=pa扛;pa=p菜a->ne常xt;fr估ee(u)提;}稼創(chuàng)孝滲if悶(pa&重&pa-輛>data糞>pc->配data)康{pb=p粥b->ne抓xt;p杠c=pc-選>next棄;}陽迫炕引else琴if跟(pa&臥&pa-胡>data番==pc-援>data摩)顫∥端pc,pa凳和pb對應裳結(jié)點元素值澇相等腐雪替扒{pre貓->nex獵t=pa;睜pre=p旺a;pa大=pa->刺next;忠∥害將新結(jié)點鏈衡入la表迷沃錦p扛b=pb-際>next腫;pc=p涉c->ne鋪xt;條齡粱∥慧鏈表的工作誕指針后移儀旁巧}鏟∥京pc,pa忽和pb對應府結(jié)點元素值要相等詞}膊}固∥蚊while貿(mào)(pa&時&pb陡&&pc嫁)院pre->蜂next=虜null;媽貌級∥扯置新la表折表尾甩while業(yè)(pa!=平null)衛(wèi)沾∥稻刪除原la啊表剩余元素省。綱{u=p躺a;pa=缺pa->n錦ext;f濕ree(u使);}孟}朗∥也算法結(jié)束擴【算法討們論】握胞算法中廣la視表、肌lb糟表貌和掀lc蝕表均從頭到豪尾(嚴格說奶lb廉、峽lc竄中最多一個煉到尾)遍歷俊一遍,算法室時間復雜度孫符合縫O枝(抽m+n+p虹)。算法主博要由邁while同(啞pa&&渣pb&龍&pc兩)控制。三讓表有一個到議尾則結(jié)束循鍛環(huán)。要注意割頭結(jié)點的監(jiān)庭視哨的作用訓,否則第一拉個結(jié)點要特咐殊處理。算絹法最后要給嫌新另la付表置結(jié)尾標盒記,同時若掙原弱la典表沒到尾,家還應釋放剩飼余結(jié)點所占怨的存儲空間陷。弊第3章域眠宇勇碧肢棧和隊列塞一、搶基礎急知識題莊3.1等撐有五個數(shù)依止次進棧:1妥,2,3,景4,5。在蒜各種出棧的灰序列中,以唯3,4先出劉的序列有哪謎幾個。(3炎在4之前出懂棧)。伶【解答】芒34215猜忌,屬34251同,娃345殊21慌3.2茫準鐵路進行列艘車調(diào)度時,湊常把站臺設哲計成棧式結(jié)亦構(gòu),若進站心的六輛列車劍順序為:1圈,2,3,偉4,5,6忘,那么是歪否能夠得到程43561旬2,32冷5641,神1546犬23和13韻5426的所出站序列,珠如果不能,伐說明為什么鮮不能;如環(huán)果能,說藏明如何得到?jīng)](即寫施出"進棧"撫或"出棧"蘆的序列)。瞇抵【解答】界輸入序列為繼12345王6,不能得勇出435聰612和互1危54623防。不能得到晝43561薄2的理由是擠,輸出序列遍最后兩元素止是12,前器面4個元素條(4356乏)得到后,嶼棧酸中元素剩1蠶2,且2在點棧頂,不可議能讓棧底元雷素1在棧頂竊元素2之前則出棧。不能隸得到涌15462扁3的理由類名似,當棧中皂元素只剩2旁3,且3在儀棧頂,2不棕可能先于3傾出棧。賠得到325蟻641的過羅程如下:1榨23順框序入棧,3浸2出棧,得積到部分輸出栗序列32;郊然后45入謙棧,5出棧稱,部分輸出協(xié)序列變?yōu)?升25;接著朱6入棧并退脂棧,部分輸穴出序列變?yōu)橐?256肺;最后41賭退棧,得最斃終結(jié)果32撤5641。責得到帽13542鑼6的過程如態(tài)下:1入殺棧并出棧,塔得到部分輸替出序列1;對然后2和3薪入棧,3出施棧,部分輸惑出序列變?yōu)楹?3;接著感4和5入棧協(xié),5,4和碑2依次出?;迹Q(mào)部分輸出序工列變?yōu)?3打542;最瓜后6入棧并寺退棧,得最枕終結(jié)果13惹5426。矛3.3半赤若用一個大窮小為6的數(shù)掉組來實現(xiàn)循秀環(huán)隊列,且創(chuàng)當前rea姿r和fro灌nt的值分責別為0和3漢,當從隊列默中刪除一個究元素,再加該入兩個元素橋后,rea幅r和fro晚nt的值分易別為多少?悼【解答】露2各和挑4飾3.4屋支設棧S和隊騰列Q的初始誠狀態(tài)為空,仔元素e1,話e2,e3皂,e4,e朋5和e6依綠次通過棧S專,一個元素贈出棧后即進蠅隊列Q,若百6個元素出盡隊的序列是豈e3,e5儲,e4,e覺6,e2,競e1,則棧撲S的容量至秤少應該是多榮少?齒【解答】徹4敬3.5亮安循環(huán)隊列財?shù)膬?yōu)點是缺什么,如何責判斷脆“珍空嚴”未和屋“是滿紹”移。蠶【解答】循餅環(huán)隊列解決嘩了常規(guī)用舌0--m-誰1前的數(shù)組表示駕隊列時出現(xiàn)厲的康“襪假溢出環(huán)”粱(即隊列未布滿但不能入而隊)。在循舌環(huán)隊列中我唱們?nèi)杂藐狀^妻指針等于隊鈔尾指針表示群隊空,而用臣犧牲一個單哨元的辦法表妻示隊滿,即討當隊尾指針膜加第1壟(求模)等予于隊頭指針如時,表示隊器列滿。也有間通過設標記不以及用一個扎隊頭或隊尾掏指針加上隊震中元障素個數(shù)來區(qū)愿分隊列的杏“陣空黨”碑和寺“暴滿乒”寄的。粉3.6魂喘設長度為n屬的鏈隊列用論單循環(huán)鏈注表表示,若棗只設頭指針奮,則入隊和注出隊的時間纖如何?若只所設尾指針呢慮?崇【解答】棵若只設頭指置針,則入隊援的時間為O堪(n),出美隊的時間為瑞O(1)。出若只設尾指箱針,則入隊翼和出隊的時虜間均為O(程1)。洽3.7搜濱指出下面程屋序段的功能帖是什么?惕(1)與棒void原demo挖1(Seq駱Stack理S)垂{int虧i,arr業(yè)[64],輛n=0;持停while鍬(!Sta叉ckEmp砍ty(S)饑)arr克[n++]熊=Pop(液S);種監(jiān)for償(i=0;量i<n;i惕++蝴)Pus阻h(S,a賀rr[i]蠶);}似【解答】悄程序段的功疼能是城實現(xiàn)了棧中晶元素的逆分置。糞(2)馬乒void編demo日2(Seq伯Stack堅S,in頃tm)匹∥火設棧中元素炎類型為in來t型礦{int男x;Se堆qStac燭kT;范Stac充kInit拿(T);蹈褲while拜(!Sta兵ckEmp執(zhí)ty(S)額)魄if巡((x=P車op(S)形!=m)年Push(沃T,x);陰while版(!(St韻ackEm顏pty(T辦)){x楚=Pop(未T);P燦ush(S讓,x);}}世【解答】摩程序段的功餡能是喝刪除了棧中標值為帝m妨的元素。以(3)斤擾vo蔑id壁demo幣3(SeQ勒ueue努Q,int但m)眾∥眼設隊列中元圍素類型為i模nt型旅{int大x;Seq文Stack生S;襖Stac聚kInit克(S);遼勒while帽(哨!Queu請eEmpt存y(Q))智{x=Qu毫eueOu迫t(Q);忙Push番(S,x)桃;}夫while致(!Sta喂ckEmp冤ty(S)水){x=P拌op(s)躺;Que否ueIn(扮Q,x);豐}}尼【解答】紐程序段的功魂能是謀實現(xiàn)了隊列嚇中元素的逆錯置。建3.8焦鹽試將下列遞筑推過程改寫度為遞歸過程財。披void引ditu乎i(int罰n){i=n;包卻次wh政ile支(i>1)旬prin草tf(i-掛-);}球【解答】仙void緣digu謝i(i無ntn)橫{if(n奶>1){p絕rintf鉗(n);便鍵徐幣dig翠ui(n-絞1);式翼央泳無}}魔3.9群早寫出下列癢中綴表達式晃的后綴表達評式:野川馳(1)A割*B*C仿(2)(傭A+B)*豎C-D童涂(3)A*弊B+C/(輔D-E)真(4)(A載+B)*D翁+E/(F抓+A*D)眠+C肉【解答】蜘(1)AB是C**賀(2)AB瞇+C*D-弓暢(3)AB值*CDE-歲/+踢屆(4)AB鋤+D*EF讓AD*+/宅+C+薯3.10執(zhí)呈澡所選擇題:循罰環(huán)奇隊列存儲在千數(shù)組A[0描..m]中汗,則入隊時啦的操作為(永)。鐮A.稍rear機=rear辱+1永棕圍B.re足ar=(r綿ear+1五)%(為m-1)沫C.re登ar=(r策ear+1狡)%m報霉D.蝦rear=住(rear仍+1)%評(m+1腰)【解答】D抗3.11扇選擇題:4收個園盤的H伏ahoi塔雕,總的移動架次數(shù)為(鳴)。季A.7服疑B.鬼8康醬C.15摧熊D.1儀6【解答】C尿3.12選啟擇題:允許赤對隊列進行嚼的操作有(淺)。民駁A.館對隊列中的屠元素排序姐口號熟肢B.取識出最近進隊梨的元素牛C.在隊稈頭元掙素之前插入哥元素嘆鄰壽袖D.濤刪除隊頭老元素【解答】D電二、算法設零計題桐3.13仗利用棧的基直本操作,編宮寫求棧中元繪素個數(shù)的算嚼法。以【題目分析司】將棧值狼元素出棧,傅出棧時計數(shù)討,直至??掌?。諸【算法】扯int桂Stac杏kLeng攪th(St排ackS裙)租檔衣{//求棧江中元素個數(shù)云主閉皂int摸n=0;裝層逢織while私(!Sta嫂ck除Empty傍(S)般競屢{酷n++;懼Pop(S屈);賊舉牲重}喬樓果環(huán)retur速n凱n;灘排偵}脂算法討論:擺若要求統(tǒng)計棉完元素個數(shù)皂后,不能破沈壞原來棧,代則在計數(shù)時響,將原棧導纏入另一臨時甘棧,計數(shù)完萌畢,再將臨蕉時棧倒入原學棧中。扁懲識int溫Stac鵝kLeng增th(St爸ackS撫)驢吉禾{//求棧怒中元素個數(shù)著砌嶄饒int儲悅n=0;辭Stack菊T;康Stack遣Init(簡T);/猛/初始化臨驚時棧T距克板險while羅(!Sta個ckEmp域ty(S)車祖知{馳n++;先Push(衡T,Pop接(S));列姻蓄}欣while善(!Sta幸ckEmp轟ty(T)挽然彼{慰Push(代S,Pop泥(T));嗓薄他}沃網(wǎng)軋本retur修n罵n;均翻相}流3.14獄雙向棧S旬是在一個數(shù)變組空間V[弊m]內(nèi)實現(xiàn)肚的兩個棧,昌棧底分別處月于數(shù)組空間絨的兩端。試乳為此雙向棧秩設計棧初始抬化Init渣(S)、入悔棧Push酸(S,i,廁x)、出棧驅(qū)Pop(S扇,i)算法排,其中i為爹0或1,用憐以指示棧號墓。賓[題目分析孤]猜兩棧共慣享向量空間學,將兩棧棧戰(zhàn)底設在向量芝兩端,初始吐時,s1棧冊頂指針為-捐1,s2棧蜂頂為m。兩省棧頂指針相識鄰時為棧滿蛇。兩棧頂相陶向、迎面增冬長,棧頂指籠針指向棧頂筆元素。開#defi慢neEl冊emTyp徹e部int作酷∥疊假設元素類內(nèi)型為整型御typed刊ef知矮struc偷t蹦{Elem桐Type境V[m];蛙纖∥略??臻g利戰(zhàn)int杠top[2伸];棒挪∥公top為兩晃個棧頂指針}stk;果stkS族;峰列麻∥復S是突如上定義的賊結(jié)構(gòu)類型變漿量,為全局們變量挽(1)渴厲棧初始化慣int島Init揭()攔少{S.to巡p[0]=爆-1;寒筍S.t皂op[1]詳=m;列柿retu贏rn予1;紹//初始化蟲成功}景(2)波三入棧操作:推int蘋push(鄙stkS臥,int召肥i,緩int褲x)救∥握i為棧號,焰i=0表示宜左棧,i=懼1為右棧,寒x是入棧元挑素。入棧成鴉功返回1,汁否則返回0蟲{嗎if劇(i<0|予|i>1)底{prin越tf(習“就棧號輸入不滋對\n劣”收);exi方t(0)惠;}露if肌(S.to踐p[1]-攏S.top旁[0]==匙1){p林rintf潤(疾“催棧已滿裳\n廊”見);容retur果n鴨(0);}蘇switc女h府(i)稀{慧case轉(zhuǎn)0:S刮.V[夫++S.t口op[0]浮]=x;扯retur撤n虎(1);綿break走;摧case堆1:S甜.V[--慶S.top代[1]]=雷x;囑retur派n家(1);}再}孔∥傻push皇(3)復您退棧操作政斤Elem于Type越pop(s登tkS友,int庭i)快跡源∥脫退棧。i代受表棧號,i挪=0時為左油棧,i=1困時為右棧。乳退棧成功返端回退棧元素僅∥差否則返回-崇1卸朱偷{蒼if坊(i<0匙||i>撥1){pr抽intf(杯“掀棧號輸入錯禽誤\n申”疑);咐exit(議0);}超縮真switc音h鷹(i)慧趨{務cas優(yōu)e飾0:茶if異(S.to詢p[0喜]==-1稈){pr么intf(踏“苦??誠n貓”堆);候retur逝n晃(-1);孝}躁辟還勞獵else次廳retur域n鉗(S.V[考S.top累[0]--拔]);繩谷比case帽1:竭if鎮(zhèn)(S.to雞p[1]=徑=m{p尚rintf斥(盲“縱??誠n惠”脈);猴retur屠n提(-1);唱}包于盾殊韻警else匆孔retur途n疾(S.V[禍S.top新[1]++取]);稠愛}挎∥消switc允h版}讓∥做算法結(jié)束乖(4)雄側(cè)判斷??掌鋓nt膝Emp攝ty();吳{丸retur璃n點(歪S.top因[0]==聲-1&&婆S.to燒p[1]=筋=m);}頭踢[算法討論蜂]涼請注意算套法中兩棧入歲棧和退棧時盟的棧頂指針核的計算。s好1(左棧)案是通常意義財下的棧,而仔s2(右棧煎)入棧操作袋時,其棧頂腿指針左移(將減1),退象棧時,棧頂副指針右移(師加1)。術暴3.15礎設以數(shù)組Q艇[m]存放賀循環(huán)隊列中平的元素,同歇時設置一個幻標志tag秘,以被tag=0圈和tag=績1來區(qū)別在哄隊頭指針(左front咳)和隊尾指乖針(濫rear)淹相等時獨,隊列狀態(tài)臂為再“用空短”逢還是恨“味不空刮”吊。試編寫相態(tài)應的入隊(閑Queue餡In)和出容隊(Que廚ueOut腫)算法。咽(1)燦攤靜初始化宣SeQue輪ueQu混eueIn爺it(Se墊Queue糊Q)搬{健//院初始化隊列清Q.fro騙nt=Q.唐rear=愁0;Q.標tag=0它;比retur眨n勉Q;櫻不蔽}諒(2)示入隊攜SeQue仆ueQu偶eueIn蛛(SeQu評eueQ卵,int閑e)懸{島//池入隊列鐵if胖((Q.t等ag==1代)&&弄(Q.r遮ear==鴿Q.fro蓋nt))防print南f("惹隊列已滿匹\n");路咱else叮{Q.且rear=距(Q.re貫ar+1)臂%m;譽Q.dat剃a[Q.r估ear]=騾e;充磁三獲if灣(Q.ta獸g==0)為Q.ta削g=1;像//葬隊列已不空}右retur犧n齊Q;}(3)出隊循ElemT激ypeQ純ueueO廊ut(Se紛Queue溝Q)件{崗//獻出隊列版if黎(Q.ta唐g==0)他prin蒸tf("判隊列為空難\n");按苗紙else含{Q.fr紙ont=(繼Q.fro歇nt+1)信%m;限唇筐e狹=Q.da版ta[Q.軍front誼];浙誼掛if篇(Q.fr撈ont==情Q.rea搜r輝)Q.t槳ag=0;猴//稀空隊列}江ret壞urn借(e);}顯3.16聽假設用變量鹽rear政和齒lengt揮h輩分別指示循疲環(huán)隊列中隊牽尾元素的位霸置和內(nèi)含元犧素的個數(shù)。如試給出此循永環(huán)隊列的定毫義,并寫出緣相應的入隊鈴(Queu翁eIn)和倦出隊(Qu那eueOu煙t)算法尋。柱【算法設計貝】漸般(1守)循環(huán)隊列緞的定義曾typed個efst和ruct關{Elem愈Type劉Q[m]突;畏電∥鳥循環(huán)隊列勸占m個存儲志單元驟int肌rear,膀leng閑th;煮閉∥貫rear笨指向隊尾元且素,len恐gth為元壁素個數(shù)從}SeQu運eue擔;伏(2犁)躺初始化品SeQue酬ueQu土eueIn織it(S妻eQueu講ecq)溜∥墾cq為循環(huán)邀隊列,本算療法進行船隊列初始化享{陶cq.re栗ar=0;每cq.l磚ength鄰=0;串retur仿n乳cq;}云(3)入拍隊列SeQue己ue門Queue怨In叉(陰SeQue箏ue雨cq,E衫lemTy被pex)充∥相cq是以如渣上定義的循些環(huán)隊列,本攏算法將元素乖x入隊攤{得if蜘(cq.l塔ength滔==m)睛retur槳n(0);柳幫暢∥句隊滿幼棄else勿{cq.宴rear=義(cq.r域ear+1舟)%m愧;押∥快計算插柏入元素位置霉毒cq.Q[煌cq.re隔ar]=x弓;琴測僻∥趨將元素x晨入隊列勿挺cq.l誘e互ngth+蠶+;毀??窒鳌螙|修改隊列與長度譯系}絮retur綁n允(cq)漲;}肉(4)燈品氏出隊市ElemT段ype諒Queue涂Out箏(去SeQue音ue括cq)穗∥遣cq是以肆如上定義的灶循環(huán)隊列,五本算法是出弊隊算法,且籌返回出隊元禮素贈{灘if尼(cq.l泄ength上==0)三retur扮n(0);鴉煩暈醉棄∥梨隊空豪else本{in折t貧front維=(cq.單rear-怒cq.le絞ngth弟+1)鏟%m;釣∥毅出隊元素歌位置律桃cq.le總ng超th--;存捏關銷門吩過∥綁修改隊列垮長度沉霸玩retu姨rn酸(cq.軍Q[fro芒nt]);殊壘困毯去∥陸返回對頭邀元素}校拆}做3.17潔已知Ack盜erman煌函數(shù)定義如醋下:睛Akm(m寬,n)=太妨試寫出遞歸飾和非遞歸算屠法。防(1椒)炕償遞歸算法根int植Ack(芝int慨m,n)資串{鋪if虹(m==0害)列ret瞞urn茅(n+1)別;階畜蕉else廈為if掌(m!=0鑒&&n閉=螺=0)想retur亭n義(Ack(漆m-1,1挽));節(jié)匙搶汗else符您retur沿n鴿(Ack(跳m-1,A崗ck(m,塘m-1))六;灌吼}落(2)聚六北非遞歸算續(xù)法誠int攤Acker雄man(征int御m,補int叉n)顫布{父int抬akm[m暈][n];鉛int病i,j;慘蒸顆for窩(j=0;甲j哭<n;j+沾+)ak辛m[0][溪j];=j灰+1;司羊鹿for敞(i=1筒;i<m;遇i++)虹極譽{akm[艙i][0]眾=akm[暗i-1][虧1敏];扭奶懇忽f銳or忍(j=1;習j<n;j厚++)慢渣草ak剝m[i][螞j]=ak處m[i-1圣][akm磚[i][j擊-1]];世貫處}其搶衫retur掉n末(akm[贊m][n]框);寺左}振3.18嫌假設稱正丑讀和反讀都碌相同的字符臉序列為難“駛回文鋸”蝦,例如,監(jiān)“半abba仁“棗和旬“昏abccb般a影”鋼是塑“自回文點”迷,桿“化abcde眉”兇和狼“兄ababa候b若”慚則不是捆“疼回文安“剃,試寫一個切算法,判揉別讀入的一株個以@為結(jié)縮束符的字符鑄序列是否是課“極回文鞠”背。填【題目分析則】將字符串豎前一半入棧黨,然后,棧編中元素和字明符串后一半畜進行比較。嶼即將第一個胸出棧元素和柄后一半串中纏第一個字符盾比較,若相堪等,則再出柏棧一個元素辰與后一個字且符比較,帝……忘,直至棧空哥,結(jié)論為字莖符序列是回書文。在出棧庸元素與串中芹字符比較不億等時,結(jié)論組字符序列不園是回文。囑int拉sym戴pthy(授char拐str[踩],海char旋s[])伯{催int痕i=0,塊j,n;膊母while豐呼(st云r[]!=瘋‘隊\0樣’戶)i++絞;//墳查字符個數(shù)腸n=提i;拉矮for東(i=0;舉i<=n/溫2;i++府)s[i壞]=str位[i];墻//前一半還字符入棧僵狼j=i域;哥泡while導(i<n井&&s揪tr[i]室==s信[j])摔//比較字印符串是否是愧回文旦暫{i煮++;j哥--;}書龍if掙(i==n勿)pri興ntf(悉“俯字符串是回湖文\n輝”掙);冊影依else辰prin杰tf(燈“轟字符串不是溪回文\n善”淡);膀捷}}判3.19令設整數(shù)序列謀a鉗1政,a難2拆,尊…軋,a深n伏,給出求恐解最大值姿的遞歸程序揮。井int飾MaxVa聚lue(括int踩a[],野int勻n)叔術∥凡設整數(shù)序列通存于數(shù)組a齡中,共有n銀個,本算法謎求解其最大魂值奔{亭if凈(n萍==1)堡max=a技[1];同抖else妙脹if宿a[n]筍>MaxV贈alue(擋a,n-1蠶)max斤=a[n]紋;懷關狠else該max=洞MaxVa泛lue(a滾,n-1)崗;沉賴retur塔n監(jiān)(max)纏;次3.20祝已知棧的三婆個運算定義氧如下:PU訊SH(ST胖,x):元附素x入ST紫棧;POP儲(ST,x棉):ST棧永頂元素出棧居并賦給變量盒x牲;Semp薦ty(ST砍):判ST鄰棧是否為空葛。利用棧的漏上述運算來干實現(xiàn)隊列的魚三個運算:容Queu粘eIn:插察入一個元素恥入隊列;國Queue暮Out:刪艙除一個元素面出隊列;Q醒ueueE頸mpty:末判隊列為空可。響【題目分析訪】訪棧的特點是慰后進先出,郵隊列的特點河是先進先出抽。所以,需陶要用兩個棧舌s1和s2贊模擬一個隊瞎列的操作:燭s1作輸入班棧,逐個元侄素壓棧,以表此模擬隊列存元素的入隊疲;出隊時,貿(mào)將棧s1退圍棧并逐個壓狡入棧s2中匹,s1中最睛先入棧的元誦素,在s2箱中處于棧頂娘,s2退棧悲,相當于隊驅(qū)列的出隊,域?qū)崿F(xiàn)了先進蜘先出。顯然葵,只有棧s攤2為空且s撇1也為空,佳才算是畝隊列空。歷(1)膠奴入隊嶼int情Queue腐In(st羊acks揭1,Ele室m缸Type顆x)慮∥位s1是容量最為n的棧,維棧中元素類撤型是Ele麗mType踏∥銜本算法將x鏟入棧,若入鍋??顺晒Ψ祷?秩,否則返薯回0折{鑼if酷(top1脅==n&具&!Se超mpty(啦s2))語灘∥呢top1是吹棧s1的棧途頂指針,是錘全局變量灌{prin濤tf(光“送棧滿誓”麥);粘retur鎖n濱(0);}餓安∥誘s1滿s2烈非空,這時帆s1不能再原入棧幣if脅(top1棄==n&沿&Sem宋pty(s樓2))仁石∥靜若s2為空鄭,先將s1難退棧,元素德再壓棧到s晉2蔽{屬while絨(!Sem鋸pty(s爸1))推{POP(鄉(xiāng)s1,x)艇;PUSH萬(s2,x今);}狐池PUSH(距s1,x)韻;婚retur滋n枕(1);話貞歲∥舒x入棧,實旦現(xiàn)了隊列元借素的入隊}(2)出隊沃void孩Queu光eOut(餐stack亭s2,s甜1)勤∥屈s2是輸出幕棧,本算法呆將s2棧頂璃元素退棧,邪實現(xiàn)隊列元忌素的出隊四{頂if隊(!Sem序pty(s繪2))劉瓶冊∥積棧s2不空扒,則直接出燒隊選{PO盡P(s2,柜x);復prin閣tf(捐“醉出隊元素為指”源,x);鍬}else撥第4章隔串胡一、基礎知慎識譜題略4.1簡語述下列每對償術語的區(qū)別派:浴司空串和空格爹串;串常炸量與串變量員;窄主串和子串志;串變量的狂名字和串變搜量的值;靜灶態(tài)分配的順臉序串與動態(tài)躺分配的順序游串。秘【解答】陣地不含任何字鐘符的串稱為虎空串,商其長度為裙0羞。僅含有空軍格字符的串迅稱為空格串屑,其長度為粗串中空格字賭符的個數(shù)。釣空格符可用芳來分割一般閣的字符,便惕于人們識別肢和閱讀,但蠶計算串長時叔應包括這些裙空格符。空涂串在串處理墳中可作為任毀意串的子串盡。菊喘用引號(數(shù)堆據(jù)結(jié)構(gòu)教學訂中通常用單在引號,而農(nóng)C命語言中用雙振引號)括起鋒來的字符序呀列稱為串常想量,串值可非以變化的量域稱為串變量娛。升串中任意個元連續(xù)續(xù)的字符組成累的子忌序列被稱為側(cè)該串的棚子串籌。包含子串引的串又被稱輕為該子串的除主串洞。子串在主懂串磁中第一次出侮現(xiàn)的第一個垮字符的位置叼稱子串在主頂串中的磨位置乖。鉆串變量的與造其它變量一霜樣,要用名寬字引用其值符,串變量的律名字也美是赤標識符,串誼變量的值可合以修改。拌串的存儲也軋有靜態(tài)存儲勁和動態(tài)存儲猶兩種。靜態(tài)債存儲指用一縱維數(shù)組,通膏常一個字符調(diào)占用一個字暴節(jié),需要靜熔態(tài)定義串的算長度,具有昂順序存儲結(jié)端構(gòu)的優(yōu)缺點富。若需要在盒程序執(zhí)行過真程中,動態(tài)踐地改變串的維長度,則可襲以利用標準養(yǎng)函數(shù)mal維loc()寬和free補()動態(tài)地承分配或釋放腹存儲單元,巾提高存儲資棕源的利用率蜘。在C語言忙中,動態(tài)分廟配和回收的跌存儲單元都吸來自于一個晚被稱之為檢“戚堆培”卷的自由存儲匹區(qū),故該方婚法可稱為冒堆分配存霉儲兔。類型定怨義如下所示債:音typed磚efst奔ruct晴{規(guī)char機*str誕;問售int雕leng跨th;脂}塌HStri拍ng;狗4.2星設有串S=覆’姿good赴’想,T=扭’斬I︼am︼繩a︼stu幕dent僵’艇,R=村’嚼!欺’參,求:諒(1)賣Strin亦gConc勸at(T,衫R)莖(2)Su投bStri母ng(T,倘8,7)倡(3)濟Strin俊gLeng升th(T)市笑(4)In淋dex(T疼,蝶’熟a裹’近)邊(5)桐Strin鴉gInse召rt(T鈔,8,S)長壇(6)Re疫place主(T,S擊ubStr市ing(T根,8,7)閘,幅’喊teach職er柔’譯)【解答】罵(1)唯Stri鏈ngCon韻cat(T屯,R)=架’艷I︼am︼流a︼stu監(jiān)dent!物’碗(寫2)貍SubS恭tring摟(T,8,寨7)=卸’罵stude畫nt足’點(3)澡Stri惠ngLen錫gth(T撤)游=14框(4)餃Inde驗x(T,濃’委a珠’樸)=3轉(zhuǎn)(5)紙Stri焦ngIns沫ert(T蔥,8,S)損=電’豪I︼am︼趴a︼goo膛dstud滴ent匠’羨經(jīng)(6)取Repl譽ace(T四,Sub株Strin輸g(T,8做,7),建’貨teach海er顫’經(jīng))=閣’筒I︼am︼咸a︼tea玩cher表’印4.3抗若串S笨1蕩=膀‘疤ABCDE縣FG義’勇,頭S傲2年=餓‘映9898玉’竊,S認3良=扎‘雪###半’短,S士4旺=消‘婚01234麻5黑’旬,執(zhí)行奸conca尊t(rep拒lace(驕S優(yōu)1蛾,su報bst失r(S端1櫻,leng夜th(S浮2蜂),len押gth(S呼3燕)),S庸3該),sub上str(S柿4稿,inde諸x(S翅2恭,義‘杜8奇’呆),len交gth(S屢2痰)))棋操作的結(jié)果效是什么?【解答】制conca胡t(rep右lace(皆S習1儀,subs嘉tr(S凳1輛,leng盞th(S慌2存),len載gth(S晝3脈)),S轎3眉),sub拳str(S搞4缸,inde斤x(S煎2勿,紙‘鏟8勿’疏),len搞gth(S扶2鏟)))招=荷conc杏at(re掙place嫁(S俗1峰,s盞ubstr鐵(S縱1擴,4,3)罪,S運3證),sub繼str(S拍4耍,2,4)績)洽=專conc灶a爛t(rep致lace(還S園1車,禍’趟D谷EF夕’址,S賭3打),伶’案1234勻’珠)內(nèi)=con媽cat(僵‘肚ABC##迷#G何’降,膠’念1234每’潛)炊=胖‘此ABC##項#G123幕4?!瘬?.4羅設S為一個這長度為n的和字符串,其竭中的字符各翠不相同,則冶S中的互異砍的非平凡子瘡串(非空且育不同于S本侮身)的個數(shù)睜是多少?肅【解答】產(chǎn)長度為n的世字符串中互秧異的非平凡爽子串(非空錄且不同于S射本身)的個薯數(shù)計算如下億:翠長度為1的伙子串有n個凝,長度為2戶的子串有n桶-1個,長擋度為3的子鏡串有n-2待個,已……艙,長度為n惑-1的子串裝有2個,長諷度為n的子餡串有1個(匯按題意要求破這個子串就塑是S本身,咽不能計算在材總數(shù)內(nèi))。稀故子串個數(shù)別為測:(2+n恨)工*(n-1醫(yī))/2壁4.5撥KMP算法丙(字符串匹蠻配算法)較件Brute僅(樸素的字怪符串匹配)杠算法有哪些瞞改進?堡【解答】K黨MP算法的但最大特點是勒主串指針不冒回溯,在整榮個匹配過程崖中,對主串是從頭到尾掃擾描一遍,對蹈于處理存儲蒸在外存上的貸大文件是非輕常有效的。助雖然麻Brute律(樸素的字牢符串匹配)車算法替的時間復雜沉度是O(n忠*m),但壇在一般情況炒下,其實際比的執(zhí)行時間搭近似于O(章n+m),毒因此至今仍傍被采用。K荷MP算法僅即當主串與模礎式間存在許貨多?!皼Q部分匹配欲”率的情況下才令顯得比記Brute掉(樸素的字景符串匹配)憤算法早快得多。蝦4.6求足串恥’嘆ababa達aa廁babaa群’憂的nex桂t函數(shù)值。【解答】飲j據(jù)12街34怎5撓67仁89皮10喂111洞2協(xié)t替串悼ab駕ab轟a零aa糧ba本b掛aa險牛next[謀j]胖01新12逆3敵42樓23通4喘56已4.7模醬式串t=觸’聚abcaa夜bbcaa罰bdab顯’沙,求模式串每的ne唇xt和ne雕xtval做函數(shù)的值?!窘獯稹拷苆敘12殿34般5玻6泛78飄91艦011凍121塘314慰t源串雜ab權ca例a驗bb撒ca螞a鵲bd常ab等算next[濤j]俊01漫11藍2星23以11確2擠23閑12誘nextv急al[j]肚01槳10豈2暈13盆10鋼2焰13驅(qū)01避仰4.8對郵S=嘗’康aabcb曬abcaa咱bcaab上a夏’儲,T消=瓦’說bca惠’賄,畫出以T異為模式串,芹S為目標串鍛的匹配過程率?!窘獯稹抗衲酃紳嵲!=1花第一趟偽匹配劉:攀裹a禁a板b款cb竹abc辣aa磁bca導ab縮a工潮超僵b支享糞居↑肢j=1粱段坊北封↓鐮i=2刃第二趟匹配宰:澆欲ab隔a袍bc宿abc史ac據(jù)bab滾挖料椒昂b載c瓣盾弱鍛型擇↑科
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌市2025-2026學年度第一學期外國語學校教育集團期末測試七年級數(shù)學試卷及答案
- 河南省許昌市鄢陵縣彭店二中2025-2026學年七年級上冊英語期末試卷(含答案無聽力原文及音頻 )
- 福建省福州福清市2025-2026學年上學期期末七年級數(shù)學試卷(含答案)
- 2026屆遼寧省名校聯(lián)盟高三1月期末考試歷史試題(含答案)
- 古詩詞誦讀《鵲橋仙·纖云弄巧》課件2025-2026學年統(tǒng)編版高一語文必修上冊
- 鋼筋混凝土保護層控制技術
- 2026年人力資源管理師招聘與配置知識要點練習(含答案)
- 2026河南鄭州市住房保障和房地產(chǎn)管理局鄭東新區(qū)服務中心招聘工作人員12名參考考試題庫及答案解析
- 2026年阜陽市臨泉縣直水務和順幼兒園招聘保育員備考考試試題及答案解析
- 飛機換季培訓課件
- 高中生物選擇性必修1期末檢測試卷
- 房屋買賣合同全文內(nèi)容
- 11BS4排水工程華北標圖集
- 電池測試崗位工作總結(jié)
- 呂國泰《電子技術》第7章觸發(fā)器和時序邏輯電路
- 路燈養(yǎng)護投標方案
- (完整版)醫(yī)療器械網(wǎng)絡交易服務第三方平臺質(zhì)量管理文件
- 中國高血糖危象診斷與治療指南
- 人教版三年級語文下冊《選讀課文8 除三害》優(yōu)質(zhì)教學設計教案-9
- 人民醫(yī)院檢驗科程序文件
- 在BBO橋牌在線練習橋牌的步驟
評論
0/150
提交評論