




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
.第1章 緒1.1 有下列幾種二元組表示的數(shù)據(jù)結構,試畫出它們分別對應的圖形表示,并指出它們分別屬于何種結構。(1) A= ( D,R ),其中,D = a1,a2,a 3,a4 , R= (2) B= ( D,R ),其中,D = a,b,c,d,e, R= (a,b),(b,c),(c,d),(d,e)(3) C= ( D,R ),其中,D = a,b,c,d,e,f,g, R= (d,b),(d,g),(b,a),(b,c),(g,e),(e,f)(4) K= ( D,R ),其中,D = 1,2,3,4,5,6, R= ,(1) 集合(2) 線性表 (3) 樹 (4) 圖 1.2 設n為正整數(shù),求下列各程序段中的下劃線語句的執(zhí)行次數(shù)。(1) i=1; k=0while(i=n-1)k+=10*i ;i+;(2) for (int i=1; i=n; i+)for (int j=1; j=n; j+) cij=0; for (int k=1; k=n; k+) cij=cij+aik*bkj解:(1) n-1 (2) (3) x=0; y=0;for (int i=1; i=n; i+)for (int j=1; j=i; j+)for (int k=1; k=j; k+) x=x+y;(3) 1.3 指出下列個算法的功能,并求其時間復雜度。(1) int sum1(int n)int p=1,s=0;for (int i=1;i=n; i+) p*= i; s+=p;return s;(2) int sum2 (int n) int s=0;for ( int i=1; i=n; i+) int p=1;for (int j=1; j=i; j+) p*=j;s+=p;return s;解:(1) , T(n)=O(n)(2) , T(n)=O(n2)1.4 算法設計有3枚硬幣,其中有1枚是假的,偽幣與真幣重量略有不同。如何借用一架天平,找出偽幣?以流程圖表示算法。上機練習題要求:給出問題分析、算法描述、源程序及運行截圖,在線提交。1. 設 a, b, c為3個整數(shù),求其中位于中間值的整數(shù)。第2章 線性表1. 設計算法:在順序表中刪除值為e的元素,刪除成功,返回1;否則,返回0。int Sqlist:DeleteElem( T e ) for (i=1; i=length; i+) / 按值順序查找 * i可從0開始 if (elemi-1= =e) / 找到,進行刪除操作 for ( j=i; jlength; j+) / ai至an依次前移 Elemj-1 = elemj; length - - ; / 表長減一 return 1 ; /刪除成功,返回 1 return 0 ; / 未找到,刪除不成功,返回 02. 分析順序表中元素定位算法 int SqList:Locate ( T e ) 的時間復雜度。解:設表長為n,等概率下,每個元素被定位的概率為:p=1/n定位成功第i個元素,需比較i次3.對于有頭結點的單鏈表,分別寫出定位成功時,實現(xiàn)下列定位語句序列。 (1) 定位到第i個結點ai;p=head; j=0;while ( p & jnext; j+;(2) 定位到第i個結點的前驅(qū)ai-1;p=head; j=0;while ( p & jnext; j+;(3) 定位到尾結點;p=head; while ( p -next ) p=p-next; (4) 定位到尾結點的前驅(qū)。p=head; while ( p-next-next ) p=p-next;4.描述一下三個概念的區(qū)別:頭指針,頭結點,首元結點。并給予圖示。頭指針:是一個指針變量,里面存儲的是鏈表中首結點的地址,并以此來標識一個鏈表。頭結點:附加在第一個元素結點之前的一個結點,頭指針指向頭結點。首元結點:指鏈表中的第一個元素結點。5. 對于無頭結點單鏈表,給出刪除第i個結點的算法描述。 template T LinkList:Delete(int i)template T LinkList:Delete(int i) / 在單鏈表上刪除第i個數(shù)據(jù)元素 if ( head=NULL) throw “表空!”; / 空表,不能刪 else if ( i=1) / 刪除第1個元素 p=Head; x=p-data; / 保存被刪元素值Head= p-next ; delete p ; else / 元素定位到第ai-1 p=Head; j=1 ; / 定位查找起始位置 while p-next & jnext; j+ ; if ( !p-next | ji-1 ); / 定位失敗 throw “刪除位置不合理”; else / 定位成功,進行結點刪除 q=p-next; x=pdata; p-next=q-next; delete q; retrun x; / 返回被刪除元素值 /#6. 用教材定義的順序表的基本操作實現(xiàn)下列操作: template int DeleteElem(SqList L, T e)#include “SqList.h“template int DeleteElem(SqList L, T e) / i = L.LocateElem(e) ; / 按值查找 if (!i) / 未找到return 0; else / 找到 delete (i) ; / 刪除被找到的元素7. 已知L是有表頭結點的單鏈表,且P結點既不是首元結點,也不是尾結點,試寫出實現(xiàn)下列功能的語句序列。(1) 在P結點后插入S結點;(2) 在P結點前插入S結點;(3) 在表首插入S結點;(4) 在表尾插入S結點.【解】(1) s-next=p-next; p-next=s;(2) q=L;while( q-next!=p) q=q-next;s-next=p 或 q-next ; q -next=s;(3) s-next=L-next; L-next=s;(3) q=L;while( q-next!=NULL) q=q-next;s-next= q-next ; q-next=s;上機練習題要求:給出問題分析、算法描述、源程序及運行截圖,在線提交。編程實現(xiàn):刪除單鏈表中值為e的元素。第3章 棧與隊列1. 鐵路進行列車調(diào)度時, 常把站臺設計成棧式結構的站臺,如右圖所示。試問:若進站的六輛列車順序如上所述, 那么是否能夠得到325641和154623的出站序列, 如果不能, 說明為什么不能; 如果能, 說明如何得到(即寫出進?;虺鰲5男蛄?。解:325641 可以 154623不可以。2. 簡述以下算法的功能(棧的元素類型為 int )。(1) status algo_1( SqStack S ) int i, n, A 255;n=0;while (!S.StackEmpty() ) n+; An= S.Pop(); for ( i=1; i= n ; i+) S.Push(Ai);(2) status algo_2(SqStack S, int e) SqStack T; int d;while (!S.tackEmpty() d = S.Pop(); if (d!=e ) T.Push(d); while (!T.StackEmpty() d=T.Pop();T.Push(d); 解:(1) 借助一個數(shù)組,將棧中的元素逆置。(2) 借助棧T,將棧S中所有值為e的數(shù)據(jù)元素刪除之。3.編寫一個算法,將一個非負的十進制整數(shù)N轉(zhuǎn)換為B進制數(shù),并輸出轉(zhuǎn)換后的結果。當N=248D,B分別為8和16時,轉(zhuǎn)換后的結果為多少?#include “stack.h”int NumTrans( int N, int B) /十進制整數(shù)N轉(zhuǎn)換為B進制數(shù)stack S; / 建立一個棧while( N!=0) / N非零 i=N%B ; / 從低到高,依次求得各位 N=N/B; S.push(i); / 各位入棧 while ( !S.StackEmpty() / 棧不空 i= S.pop(); If (i9) i=A+10-i; cout S.pop(); / 依次出棧,得到從高到低的輸出結果/#4 借且棧,設計算法:假設一個算術表達式中包含“(”、“)”括號,對一個合法的數(shù)學表達式來說,括號“(”和“)”應是相互匹配的。若匹配,返回1;否則,返回0。解:以字符串存儲表達式,也可以邊輸入邊判斷。 順序掃描表達式,左括號,入棧;右括號,如果此時???,表示多右括號,不匹配;如果棧不空,出棧一個左括號。掃描結束,如果棧空,表示括號匹配;否則,括號不匹配,多左括號。int blank_match(char *exp) 用字符串存表達式 SqStack s; / 創(chuàng)建一個棧 char *p=exp; / 工作指針p指向表達式首 while ( *p!=) / 不是表達式結束符 switch(p) case (: /左括號,入棧 s.push(ch); break; case ) / 右括號 if (s.StackEmpty() return 0; / ???,不匹配,多右括號 else s.Pop(); break; / 左括號出棧 /switch p+; / 取表達式下一個字符 / while if (!s.StackEmpty() / 表達式結束,棧不空 return 0 ; /不匹配,多左括號 else return 1 ; / 匹配 /#5. 簡述棧和隊列的邏輯特點,各舉一個應用實例。6. 寫出下列中綴表達式的后綴表達式。(1)-A+B-C+D(2)(A+B)*D+E/(F+A*D)+C(3) A&B|!(EF)(1) A-B+C-D+(2) AB+D*EFAD*+/+C+(3) AB&EF ! |7.計算后綴表達式:4 5 * 3 2 + - 的值。解:158.將下列遞推過程改寫為遞歸過程。void recursion( int n ) int i=n; while( i1) cout1) courx;if (x=0) sum=0;else test(sum); sum+=x; coutx;while (x) S.push(x); cinx; sum=0; coutsum;while ( x=S.pop() ) sum+=x; coutsum; /10. 簡述以下算法的功能(棧和隊列的元素類型均為 int)。void algo (Queue &Q) Stack S; /創(chuàng)建一個棧int d;while (!Q.QueueEmpty() d=DeQueue(Q); S.Push(d); while (!S.StackEmpty() d=S.Pop();Q.EnQueue(d); 解:利用棧,將隊列中的元素逆置12. 假設以數(shù)組sem存放循環(huán)隊列的元素,同時設變量rear和front分別作為隊首、隊尾指針,且隊首指針指向隊首前一個位置,隊尾指針指向隊尾元素處,初始時,rear=fornt=-1。寫出這樣設計的循環(huán)隊列入隊、出隊的算法。解:采用教材隊空與隊滿判別方法。為了區(qū)分隊空與隊滿條件,犧牲一個元素空間。即:rear=front, 為隊空;rear=(front+1)%m,為隊滿。template void EnQueue( T Se, T e, int m ) /入隊 if ( rear+1)%m=fornt ) /隊滿,不能插入throw “隊滿,不能插入!” else rear = (rear+1) % m; / 隊尾指針后移 serear=e; / 元素入隊 return ;/#template T DnQueue( T Se, int m ) / 出隊 if ( rear=fornt ) /隊空,不能出隊!throw “隊空,不能出隊!” else front = (front+1)%m; / 指針后移,指向隊首元素 e =sefront; / 取隊首元素 return e ; /#上機練習題要求:給出問題分析、算法描述、源程序及運行截圖,在線提交。1.借助棧,實現(xiàn)單鏈表上的逆置運算。第4章 串1. 試問執(zhí)行以下函數(shù)會產(chǎn)生怎樣的輸出結果?void demonstrate( ) StrAssign( s, THIS IS A BOOK);StrRep ( s, StrSub(s, 3, 7), ESE ARE);StrAssign( t, StrConcat ( s, S ) ) ;StrAssign(u, XYXYXYXYXYXY );StrAssign(v, StrSub ( u, 6, 3 ) );StrAssign(w, W);cout“t=” tendl;cout“v=” v;cout“u=” StrRep(u, v, w); / demonstrate解:t= THESE ARE BOOKSv= YXYw= XWXWXW2.設字符串S=aabaabaabaac,P=aabaac1)給出S和P的next值和nextval值;2)若S作主串,P作模式串,試給出KMP算法的匹配過程。1)S的next與nextval值分別為012123456789和002002002009,p的next與nextval值分別為012123和0020032)利用KMP算法的匹配過程: 第一趟匹配:aabaabaabaac aabaac(i=6,j=6) 第二趟匹配:aabaabaabaac (aa)baac 第三趟匹配:aabaabaabaac (成功) (aa)baac3. 算法設計串結構定義如下:struct SString char *data; / 串首址 int len; / 串長 int StrSize; / 存放數(shù)組的最大長度. ;(1) 編寫一個函數(shù),計算一個子串在一個字符串中出現(xiàn)的次數(shù),如果不出現(xiàn),則為0。int str_count (SString S, SString T )解:int str_count (SString S, SString T) int i, j,k, count=0; for ( i=0; S.datai; i+) for ( j=i, k=0; (S.dataj=T.datak; j+,k+) if ( k= =T.len-1) count + +; return count;(2) 編寫算法,從串s中刪除所有和串t相同的子串。解:int SubString_Delete(SString &s, SString t )/從串s中刪除所有與t相同的子串,并返回刪除次數(shù)for ( n=0, i=0; i=s.len-t.len; i+ )for ( j=0; j t.len) /找到了與t匹配的子串for ( k = i; ks.len-t.len; k+ ) sk=sk+t.len; /左移刪除s.len-=t.len ;n+; / 被刪除次數(shù)增1/forreturn n;/Delete_SubString(2) 編寫一個函數(shù),求串s和串t 的一個最長公共子串。void maxcomstr( SString *s, SString *t)解:void maxcomstr( SString *s, SString *t) int index=0,len1=0, i,j,k,len2; i=0; / 作為掃描s的指針 while ( i s.len) j = 0; / 作為掃描t的指針 while ( j len1) / 將較大長度者給index和len1 index=i; len1=len2; j + = len2; /if else j+; /while cout”最長公共子串:” for ( i=0; ilen1; i+; ) couts.dataindex+1; / #1. 已知下列字符串a(chǎn) = THIS, f = A SAMPLE, c = GOOD, d =NE, b = , s = StrConcat(a,StrConcat(StrSub(f,2,7),StrConcat(b, StrSub (a,3,2),t = StrRep(f, StrSub (f,3,6),c),u = StrConcat(StrSub(c,3,1),d), g = IS,v = StrConcat(s,StrConcat(b,StrConcat(t,StrConcat(b,u),試問: s, t, v, StrLength(s), StrIndex(v,g), StrIndex(u,g) 各是什么 ?已知:s=(XYZ)+* ,t=(X+Z)*Y。試利用下列運算,將 s 轉(zhuǎn)化為 t。聯(lián)接:StrConcat ( &S,T )求子串:(char *) StrSub( S, i, len ) 置換:StrRep ( &S, T, R )上機練習題要求:給出問題分析、算法描述、源程序及運行截圖,在線提交。串結構定義如下:struct SString char *data; / 串首址 int len; / 串長 int StrSize; / 存放數(shù)組的最大長度. ;求:串S所含不同字符的總數(shù)和每種字符的個數(shù),不區(qū)分英文字母的大小寫。第5章 數(shù)組與壓縮矩陣1. 假設有二維數(shù)組 A68,每個元素用相鄰的 6 個字節(jié)存儲,存儲器按字節(jié)編址。已知 A 的起始存儲位置(基地址)為 1000,計算:(1) 數(shù)組 A 的體積(即存儲量);(2) 數(shù)組 A 的最后一個元素 a57 的第一個字節(jié)的地址;(3) 按行存儲時,元素 a14 的第一個字節(jié)的地址;(4) 按列存儲時,元素 a47 的第一個字節(jié)的地址。 解:(1)686 = 288Byte(2)1000+288-6=1282;(3)1000+(18+4)6=1072(4)1000+(76+4)6=12762. 假設按低下標優(yōu)先存儲整數(shù)數(shù)組A9358時,第一個元素的字節(jié)地址是 100,每個整數(shù)占四個字節(jié)。問下列元素的存儲地址是什么?(1)
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 滄州房地產(chǎn)租賃市場調(diào)研及市場預測合同
- 形狀記憶合金伸縮縫安裝技術
- 呼叫中心員工培訓
- 波羅的海白海標準定期租船合同
- 睡眠呼吸暫停綜合征的護理
- 中西方教育模式對比分析
- 中班健康活動能干的值日生
- 中小學女生青春期心理健康教育
- 培訓內(nèi)容分類
- 公休座談會流程規(guī)范
- 中建二測2025題庫
- 制造業(yè)生產(chǎn)線質(zhì)量管理措施
- 定制家具樣板間合同范本
- 東方經(jīng)(已經(jīng)排好版)
- DB14-T 3225-2025 煤矸石生態(tài)回填環(huán)境保護技術規(guī)范
- 福建省廈門市2022-2023學年高二下學期質(zhì)量檢測生物試題(解析版)
- 2025年燃氣輪機值班員職業(yè)技能知識考試題庫
- 2025年山西焦煤西山煤電集團公司招聘筆試參考題庫含答案解析
- 催收合規(guī)培訓
- 湖南中醫(yī)藥大學湘杏學院《民族地區(qū)社會工作》2023-2024學年第一學期期末試卷
- 重力式混凝土擋土墻施工方案
評論
0/150
提交評論