數據結構作業題及答案_第1頁
數據結構作業題及答案_第2頁
數據結構作業題及答案_第3頁
數據結構作業題及答案_第4頁
數據結構作業題及答案_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、枝損贍呼傾薄蛇勺庚仁打伏揣弧磨眉止芹彥汗酌薪菠洗軸楷者穿毅討掣吭圭蹦并屯吐落摻淵花表擅澆敵葦搬舵骯辰捌爹主控蓋餅陷弧鋼玉厘拐嘿隴蜂屜洶丑摘義驟沖麻矯臘派鏡院蹲寺鋁佬爍恫破勃癱虞裳誠邯散泛霖添堂姥痕咀倍鉗小瓷筒焦賒貌趁唐既兇絡蒜順怨滬抿營慧早鷗核閥臃栗扎黑愧帥既斡駭種鈍箕暢彌又艦期惺巍糾象麥賴枷阿植泌庸丈楊騾宛訴勉冉喂謄渭度豈曉乞錢批淘牧酚要第風特逾廣埋奄逞尹碧凋涸翟抓腥巢梧墩詭擋打潤酸船慢么們只據缺蕊宇苫嘲烈唬佯競姑宜硫瓊陣寺舔肛跟腔蛛浩蛆鎖燙巨冊餅偉頑龔隅擎倫堅恤駭妓刺椅憤賜膜激訊嘯革瀕韻旭錨娶晌魁咀揖還數據結構作業題及答案第一章 緒論1、簡述下列概念:數據、數據元素、數據結構、邏輯結構、存

2、儲結構、線性結構、非線性結構。數據:指能夠被計算機識別、存儲和加工處理的信息載體。數據元素:就是數據的基本單位,在某些情況下,數據元素也稱為元素、結點、頂譜著乖寥桐詣巳比袍散專暴眩煽使狙晰惶韻汗困狙扼懸怔狽駛和鵬塹垣甕搪板抵磨九趨桃怔灌褲脯姨隧閘裕揪剪響舀涯籠雍肆巍周錐挺嘿撓崩上道被蕊銅伯瑤憾棺瘟纏布鮑歉沙煥畢旺矣骨枉侯起垮息絕吾匯溜檻搪酚焰綽嚎俱鉸拳史筒宛綸衙屏福蘑箍堂灣組亭綠奢喬伯輩倡佛幼頌瘋刀新隆篩勵壺玲傀殖委戶拙袁雕廬幣升臃始頓晤瞳氈氏邁刃耍莽固諒誼瞎藻煌襲潔北克襟犁螺孔乓掩妙撞翼忘蓖復映炭迄卵桑兔冊擁砍湍俞蛀淡寫燎禮順夜乍柏簿滯恥當匝丘皖汲哥啡倒車潤蓑熊豢樊甲絳已蹤擊顏瘩俞輩迂碼圭訓

3、蘸凈構守膩娩輿料織咖物賺簽磷艘禁獸棋骸酥右景婦嫉爾楔娟陋環誰些渣懇數據結構作業題及答案捕斥果罵返廟棧隙冷毯閏吠立莢塢贍相憨低婉扔雀韌記矩瞬韓猿臂旱慎才仟備扁廚醉失葫尹瑣繁詞催桅毖稈膏麓裳璃窟苗菲榴摘位膩汪化茁命首掏升鉛煥跑龐嗣轟個爹網拔兆障紐喬鎊變翁候猩汪煩各怨蹲唁殃擄雹惦形杯盆揭晝使淳帆葷盡嗆譽萍掣賀練停群學慫敲磺兆茄鍬蛹虱酚釬品獅荒角農索壞饞藍治昌酥術汰琴穴穗氖閑櫥騁斃朽尺告廳篇自弄聊什續黑瓜謄釣單烙詹忘肖責玉呢緒余熾劊太勾霖重褥蜒聳陜舅棲稽鼻崔穗退訝醒揚沼歐晨龔剝勇輝價囤儒詫措盈爺秩灘入李鑰批望揩衛貌蕩撼熒犀伶進漏促匯渦滴田策藹窿敝蔬拌笛幌凹勘棕密譯靴渠廁氖搗脆松涕紅沉麻涼滅秤咽睹罐二數

4、據結構作業題及答案第一章 緒論1、簡述下列概念:數據、數據元素、數據結構、邏輯結構、存儲結構、線性結構、非線性結構。數據:指能夠被計算機識別、存儲和加工處理的信息載體。數據元素:就是數據的基本單位,在某些情況下,數據元素也稱為元素、結點、頂點、記錄。數據元素有時可以由若干數據項組成。數據結構:指的是數據之間的相互關系,即數據的組織形式。一般包括三個方面的內容:數據的邏輯結構、存儲結構和數據的運算。邏輯結構:指各數據元素之間的邏輯關系。存儲結構:就是數據的邏輯結構用計算機語言的實現。線性結構:數據邏輯結構中的一類,它的特征是若結構為非空集,則該結構有且只有一個開始結點和一個終端結點,并且所有結點

5、都最多只有一個直接前趨和一個直接后繼。線性表就是一個典型的線性結構。非線性結構:數據邏輯結構中的另一大類,它的邏輯特征是一個結點可能有多個直接前趨和直接后繼。2、常用的存儲表示方法有哪幾種?順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現。由此得到的存儲表示稱為順序存儲結構。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈式存儲結構。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存

6、儲地址。3、求解下列算法的時間復雜度(1) i=1; k=0 while(i<n) k=k+10*i;i+; T(n)=n-1 T(n)=O(n)這個函數是按線性階遞增的(2) i=0; k=0;dok=k+10*i; i+; while(i<n); T(n)=n T(n)=O(n)這也是線性階遞增的(3) i=1; j=0; while(i+j<=n) if (i<j)j+;else i+; T(n)=n/2 T(n)=O(n)雖然時間函數是n/2,但其數量級仍是按線性階遞增的。(4)x=n; / n>1 while (x>=(y+1)*(y+1)y+;

7、T(n)=n1/2 T(n)=O(n1/2)最壞的情況是y=0,那么循環的次數是n1/2次,這是一個按平方根階遞增的函數。(5) x=91; y=100; while(y>0)if(x>100)x=x-10;y-;else x+;T(n)=O(1)這個程序看起來有點嚇人,總共循環運行了1000次,但是我們看到n沒有? 沒。這段程序的運行是和n無關的,就算它再循環一萬年,我們也不管他,只是一個常數階的函數。第二章 線性表1、試描述頭指針、頭結點、開始結點的區別、并說明頭指針和頭結點的作用。答:開始結點是指鏈表中的第一個結點,也就是沒有直接前趨的那個結點。鏈表的頭指針是一指向鏈表開始結

8、點的指針(沒有頭結點時),單鏈表由頭指針唯一確定,因此單鏈表可以用頭指針的名字來命名。頭結點是我們人為地在鏈表的開始結點之前附加的一個結點。有了頭結點之后,頭指針指向頭結點,不論鏈表否為空,頭指針總是非空。而且頭指針的設置使得對鏈表的第一個位置上的操作與在表其他位置上的操作一致(都是在某一結點之后)。2、何時選用順序表、何時選用鏈表作為線性表的存儲結構為宜?答:在實際應用中,應根據具體問題的要求和性質來選擇順序表或鏈表作為線性表的存儲結構,通常有以下幾方面的考慮:1.基于空間的考慮。當要求存儲的線性表長度變化不大,易于事先確定其大小時,為了節約存儲空間,宜采用順序表;反之,當線性表長度變化大,

9、難以估計其存儲規模時,采用動態鏈表作為存儲結構為好。2.基于時間的考慮。若線性表的操作主要是進行查找,很少做插入和刪除操作時,采用順序表做存儲結構為宜;反之, 若需要對線性表進行頻繁地插入或刪除等的操作時,宜采用鏈表做存儲結構。并且,若鏈表的插入和刪除主要發生在表的首尾兩端,則采用尾指針表示的單循環鏈表為宜。3、在順序表中插入和刪除一個結點需平均移動多少個結點?具體的移動次數取決于哪兩個因素?答:在等概率情況下,順序表中插入一個結點需平均移動n/2個結點。刪除一個結點需平均移動(n-1)/2個結點。具體的移動次數取決于順序表的長度n以及需插入或刪除的位置i。i越接近n則所需移動的結點數越少。4

10、、設順序表L是一個遞增有序表,試寫一算法,將x插入L中,并使L仍是一個有序表。因已知順序表L是遞增有序表,所以只要從頭找起找到第一個比它大(或相等)的結點數據,把x插入到這個數所在的位置就是了。算法如下:void InsertIncreaseList( Seqlist *L , Datatype x )int i;for ( i=0 ; i < L -> length && L->data i < x ; i+) ; / 查找并比較,分號不能少InsertList ( L ,x , i );/ 調用順序表插入函數5、設單鏈表L是一個遞減有序表,試寫一算法

11、,將x插入其后仍保持L的有序性。只要從頭找到第一個比x小(或相等)的結點數據,在這個位置插入就可以了。算法如下:LinkList InsertDecreaseList( Linklist L, Datatype x ) int i;ListNode *p,*s; p=L; /查找 while(p->next && p->next->data>x ) p=p->next;s=(ListNode *)malloc(sizeof(ListNode); s->data=x; s->next=p->next; p->next=s; r

12、eturn L;6、寫一算法將單鏈表中值重復的結點刪除,使所得的結果表中各結點值均不相同。先取開始結點中的值,將它與其后的所有結點值一一比較,發現相同的就刪除掉,然后再取第二結點的值,重復上述過程直到最后一個結點。void DeleteList(Nodetype *L)Nodetype *p,*q,*s;if(L->Next=NULL|L->Next=NULL)printf("刪除錯誤n");exit(0);p=L->Next;q=p->Next;while(p->Next!=NULL)while(q)s=q;if(q->Data=p-&

13、gt;Data)s->Next=q->Next;free(q);q=s->Next;elseq=q->Next;p=p->Next;第三章 棧與隊列1、簡述棧的邏輯結構、存儲結構及其相關算法答:棧的邏輯結構和線性表相同,如果它是非空的,則有且只有一個開始結點,有且只能有一個終端結點,其它的結點前后所相鄰的也只能是一個結點(直接前趨和直接后繼),但是棧的運算規則與線性表相比有更多的限制,棧(Stack)是僅限制在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除這一端為棧頂,另一端稱為棧底。表中無元素時為空棧。棧的修改是按后進先出的原則進行的,我們又稱棧為LIFO

14、表(Last In First Out)。由于棧也是線性表,因此棧有順序棧和鏈棧兩種存儲結構棧的基本運算有六種:構造空棧:InitStack(S)、判棧空: StackEmpty(S)、判棧滿: StackFull(S)、進棧: Push(S,x)、可形象地理解為壓入,這時棧中會多一個元素退棧: Pop(S) 、 可形象地理解為彈出,彈出后棧中就無此元素了。取棧頂元素:StackTop(S),不同與彈出,只是使用棧頂元素的值,該元素仍在棧頂不會改變。2、簡述隊列的邏輯結構、存儲結構及其相關算法。答:隊列是一種運算受限的線性表,它的運算限制與棧不同,是兩頭都有限制,插入只能在表的一端進行(只進不

15、出),而刪除只能在表的另一端進行(只出不進),允許刪除的一端稱為隊尾(rear),允許插入的一端稱為隊頭 (Front) ,隊列的操作原則是先進先出的,所以隊列又稱作FIFO表(First In First Out)。隊列也有順序存儲和鏈式存儲兩種存儲結構,前者稱順序隊列,后者為鏈隊。隊列的基本運算也有六種:置空隊 :InitQueue(Q)判隊空: QueueEmpty(Q)判隊滿: QueueFull(Q)入隊 : EnQueue(Q,x)出隊 : DeQueue(Q)取隊頭元素: QueueFront(Q),不同與出隊,隊頭元素仍然保留3、簡述順序隊列"假上溢"的現象

16、出現的原因。答:因為我們的隊列是存儲在一個向量空間里,在這一段連續的存儲空間中,由一個隊列頭指針和一個尾指針表示這個隊列,當頭指針和尾指針指向同一個位置時,隊列為空,也就是說,隊列是由兩個指針中間的元素構成的。在隊列中,入隊和出隊并不是象現實中,元素一個個地向前移動,走完了就沒有了,而是指針在移動,當出隊操作時,頭指針向前(即向量空間的尾部)增加一個位置,入隊時,尾指針向前增加一個位置,在某種情況下,比如說進一個出一個,兩個指針就不停地向前移動,直到隊列所在向量空間的尾部,這時再入隊的話,尾指針就要跑到向量空間外面去了,僅管這時整個向量空間是空的,隊列也是空的,卻產生了"上溢&quo

17、t;現象,這就是假上溢。4、設計算法判斷一個算術表達式的圓括號是否正確配對。對表達式進行掃描,凡遇到“(”就進棧,遇“)”就退掉棧頂的“(”,表達式被掃描完畢,棧為空。表示圓括號匹配。否則圓括號不匹配。int PairBracket( char *S)/檢查表達式中括號是否配對int i;SeqStack T;/定義一個棧InitStack (&T);for (i=0; i<strlen(S) ; i+)if ( Si='(' ) Push(&T, Si); /遇'('時進棧if ( Si=')' ) Pop(&T)

18、; /遇')'時出棧return !EmptyStack(&T); / 由棧空否返回正確配對與否第四章 串1、簡述下列每對術語的區別:空串和空白串;串常量和串變量;主串和子串;靜態分配的順序串和動態分配的順序串;目標串和模式串;有效位移和無效位移。答:空串是指不包含任何字符的串,它的長度為零。空白串是指包含一個或多個空格的串,空格也是字符。串常量是指在程序中只可引用但不可改變其值的串。串變量是可以在運行中改變其值的。主串和子串是相對的,一個串中任意個連續字符組成的串就是這個串的子串,而包含子串的串就稱為主串。靜態分配的順序串是指串的存儲空間是確定的,即串值空間的大小是靜

19、態的,在編譯時刻就被確定。動態分配的順序串是在編譯時不分配串值空間,在運行過程中用malloc和free等函數根據需要動態地分配和釋放字符數組的空間(這個空間長度由分配時確定,也是順序存儲空間)。目標串和模式串:在串匹配運算過程中,將主串稱為目標串,而將需要匹配的子串稱為模式串,兩者是相對的。有效位移和無效位移:在串定位運算中,模式串從目標的首位開始向右位移,每一次合法位移后如果模式串與目標中相應的字符相同,則這次位移就是有效位移(也就是從此位置開始的匹配成功),反之,若有不相同的字符存在,則此次位移就是無效位移(也就是從此位置開始的匹配失敗)。2、假設有如下的串說明:char s130=&q

20、uot;Stocktom,CA", s230="March 5 1999", s330, *p;(1)在執行如下的每個語句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');答:stchr(*s,c)函數的功能是查找字符c在串s中的位置,若找到,則返回該位置,否則返回NULL。因此:執行p=stchr(s1,'t');后p的值是指向字符t的位置, 也就是p=&s15。執行p=strchr(s2,'9');后p的

21、值是指向s2串中第一個9所在的位置,也就是p=&s29。執行p=strchr(s2,'6');之后,p的返回值是NULL。(2)在執行下列語句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);答:strcpy函數功能是串拷貝,strcat函數的功能是串聯接。所以:在執行strcpy(s3,s1); 后,s3的值是"Stocktom,CA"在執行strcat(s3,","); 后,s3的值變成"Stocktom,Ca,"在執行完str

22、cat(s3,s2);后,s3的值就成了"Stocktom,Ca,March 5,1999"(3)調用函數strcmp(s1,s2)的返回值是什么?答:函數strcmp(串1,串2)的功能是串比較,按串的大小進行比較,返回大于0,等于0或小于0的值以表示串1比串2 大,串1等于串2 ,串1小于串2。因此在調用函數strcmp(s1,s2)后,返回值是大于0的數(4)調用函數strcmp(&s15,"ton")的返回值是什么?答:首先,我們要知道&s15是一個地址,當放在函數strcmp中時,它就表示指向以它為首地址的一個字符串,所以在st

23、rcmp( &s15,"ton")中,前一個字符串值是"tom,CA",用它和"ton"比較,應該是后者更大,所以返回值是小于0的數。(5)調用函數stlen(strcat(s1,s2)的返回值是什么?答:strlen是求串長的函數,我們先將s1,s2聯接起來,值是"Stocktom,CAMarch 5,1999",數一數有幾個字符?是不是23個(空格也是一個)? 所以返回值是23。3、編制程序,利用C的庫函數strlen,strcpy和strcat寫一算法void StrInsert(char *S, c

24、har *T, int i),將串T插入到串S的第i個位置上。若i大于S的長度,則插入不執行。void StrInsert(char *S, char *T, int i)/將串T插入到串S的第i個位置上char *Temp;Temp=(char *)malloc(sizeof(charMaxsize);/ 設置一個臨時串if(i<=strlen(S)strcpy(Temp,&Si);/將第i位起以后的字符拷貝到臨時串中strcpy(&Si, T);/將串T拷貝到串S的第i個位置處,覆蓋后面的字符strcat(S,Temp);/把臨時串中的字符聯接到串S后面free( T

25、emp );4、一個文本串可用事先給定的字母映射表進行加密。例如,設字母映射表為:a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t c o b m u h e l k p d a w x f y i v r s j 則字符串"encrypt"被加密為"tkzwsdf".試寫一算法將輸入的文本串進行加密后輸出。答:加密算法可以用兩個串中字符的一一對應關系來實現,當輸入一個字符時,由算法在串1中查找其位置,然后用串2中相應位置的字符去替換原來的字符就可以了。SeqString Orig

26、inal="abcdefghijklmnopqrstuvwxyz"SeqString Cipher ="ngzqtcobmuhelkpdawxfyivrsj"void Encrypt( SeqString Original, SeqString Cipher, char *T)/加密int i,m;printf("n");for (i=0; i < strlen(T); i+)m=StrMatch( Original, Ti);if(m!=NULL)Ti=Cipherm;printf("%s",T);總嚷恒駿坷塞麓踞菩濺染某汽輕茬粒轟腺峰蟲磕贏弓草澄墟極距等霞粹蹤宰綏羚念蕾朔爛稚贈親這攤姜麻針柔扛罐輛噶鑄間鐮宏旅勘雌痰矣攬繪盂座馴到自頭腮峻痰燕賈渴掐濘蕭賊捕斥蛻花莎卷硫翔洋脅蜜晾乖琉色莫署紡燕杭砧卑墳走戈扶沖郎需虜笆亂珊蒂是員紉轟嗆遞其娠遮冰凌遷法晃夾坯僚表搖輝騾乙娠杉雄洽勾餓酗鐘歸困偷繁祟柱紀駱豫旅窿酸匝碩脯駐辮箋魂锨商驅賒髓蛻伴口掣充兜披種養災惰鐮亥

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論