數據結構-基于C++語言(微課版) 習題及答案 王想實_第1頁
數據結構-基于C++語言(微課版) 習題及答案 王想實_第2頁
數據結構-基于C++語言(微課版) 習題及答案 王想實_第3頁
數據結構-基于C++語言(微課版) 習題及答案 王想實_第4頁
數據結構-基于C++語言(微課版) 習題及答案 王想實_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

緒論習題一、填空題計算機識別、存儲和加工處理的對象統(tǒng)稱為數據。數據結構被定義為(D,R),其中D是數據的有限集合,R是D上的關系有限集合。數據結構以不同視角,可以分為邏輯結構和物理結構兩種結構。數據結構按邏輯結構可分為兩大類,它們是線性結構和非線性結構。數據結構是指數據及其相互之間的關系的集合。當結點之間存在M對N(M:N)的聯(lián)系時,稱這種關系為網狀結構。當結點之間存在1對N(1:N)的聯(lián)系時,稱這種結構為層次結構。從數據結構的觀點,數據通常可分為三個層次,即數據、數據元素和數據對象。數據物理結構被分為順序存儲、鏈式存儲、散列存儲和索引存儲四種。算法是對求解問題的一種描述,是指令的有限序列。對算法從時間和空間兩方面進行度量,分別稱為時間復雜度和空間復雜度分析。算法效率的度量可以分為事先估算法和事后統(tǒng)計法。若一個算法中的語句頻度之和為T(n)=4n2+3nlog2n,則算法的時間復雜度為O(n2)。若一個算法中的語句頻度之和為T(n)=4n2+3n+2n,則算法的時間復雜度為O(2n)。程序for(i=1,t=1,s=0;i<=n;i++){t=t*i;s=s+t;}的時間復雜度為O(n)。當輸入不合法數據時,應能作適當處理,不致引起嚴重后果,是指算法的健壯性特性。二、選擇題數據結構通常是研究數據的(A)及它們之間的相互關系。A.存儲結構和邏輯結構B.存儲和抽象C.聯(lián)系和抽象D.聯(lián)系與邏輯數據在計算機存儲內表示時,物理地址和邏輯地址相同并且是連續(xù)的,稱之為(A)。A.順序存儲結構B.鏈式存儲結構C.邏輯結構D.物理結構鏈式存儲結構所占存儲空間(A)。A.分兩部分,一部分存放結點的值,另一個部分存放表示結點間關系的指針。B.只有一部分,存放結點的值。C.只有一部分,存儲表示結點間關系的指針。D.分兩部分,一部分存放結點的值,另一部分存放結點所占單元素線性表采用鏈式存儲時,其地址(D)。A.必須是連續(xù)的B.部分地址必須是連續(xù)的C.一定是不連續(xù)的D.連續(xù)與否均可以與數據元素本身的形式、內容、相對位置、個數無關的是數據的(C)。A.存儲結構

B.存儲實現C.邏輯結構

D.運算實現在數據結構中,從邏輯上可以把數據結構劃分成(C)。A.動態(tài)結構和靜態(tài)結構

B.緊湊結構和非緊湊結構C.線性結構和非線性結構

D.內部結構和外部結構通常要求同一邏輯結構中的所有數據元素具有相同的特性,這意味著(B)。A.數據具有同一特點B.不僅數據元素所包含的數據項的個數要相同,而且對應數據項的類型要一致C.每個數據元素都一樣D.數據元素所包含的數據項的個數要相等在數據結構中,與所使用的計算機無關的是(C)。A.物理結構B.存儲結構C.邏輯結構D.邏輯和存儲結構算法的時間復雜度與(B)有關。A.計算機硬件性能B.問題規(guī)模C.內存芯片的有關參數D.編譯程序質量算法分析的兩個主要方面是(A)。A.空間復雜性和時間復雜性B.正確性和簡明性C.可讀性和文檔性D.數據復雜性和程序復雜性數據結構的定義為(D,S),其中D是(B)的集合。A.?算法????B.數據元素???C.?數據操作???D.?邏輯結構下面程序段的時間復雜度為(C)。for(inti=0;i<m;i++)for(intj=0;j<n;j++)a[i][j]=i*j;A.O(m2)B.O(n2)C.O(m*n)?D.O(m+n)下面程序段的時間復雜度為(C)。s=0;for(i=1;i<=n;i++){for(j=n;j>=n-1;j--) s=s+1;}A.O(n)B.O(nlog2n)C.O(n2)D.O(n3/2)下列時間復雜度中最壞的是(D)。A.O(1)B.O(n)C.O((log2n)D.O(n2)下面是關于兩個矩陣加法的算法實現,其時間復雜度是(D)。for(i=0;i<n;i++)for(j=0;i<n;j++)c[i][j]=a[i][j]+b[i][j];A.O(1)B.O(n)C.O(log2n)D.O(n2)三、簡答題說明數據、數據元素、數據項之間的關系。答:數據是信息的載體,它是能夠被計算機識別、存儲和加工處理的對象。數據元素是數據結構中討論的基本單位,是數據集合中的個體。一個數據元素可由若干個數據項組成,多個數據項構成數據元素,每一個數據項都是不可再分割的。解釋數據結構、邏輯結構、存儲結構之間的聯(lián)系與區(qū)別。答:數據結構從不同視角可以劃分為邏輯結構與存儲結構,邏輯結構指的是數據間的關系,它又分為線性結構和非線性結構,而存儲結構是邏輯結構的存儲映像。這兩者并不沖突,一個指的是數據之間的關系,而另一個指這種關系在計算機中的表示形式。算法的特性有哪些?答:有窮性、確定性、可行性、輸入和輸出。簡述數據結構上的基本操作主要有哪些。答:

查找、插入、刪除、更新和輸出。簡述時間復雜度和空間復雜度主要與哪些因素有關。答:時間復雜度與算法本身的性質即算法中控制結構和原操作有關,算法本身的性質又包括其涉及的問題規(guī)模。同時算法還有與選擇的何種算法策略有關??臻g復雜度與所處理數據結點的大小和個數有關,同時與算法在某次執(zhí)行中處理的特定數據的大小和規(guī)模有關。當一個算法被轉換成程序并在計算機上執(zhí)行時,其運行所需要的時間一般取決于哪些因素?答:因素有算法選用何種策略、問題的規(guī)模、程序設計的語言、編譯程序所產生的機器代碼的質量和機器執(zhí)行指令的速度。四、算法分析題分析下面語句段執(zhí)行的時間復雜度。for(i=1;i<=n;i++)for(j=1;j<=n;j++)s++;答:時間復雜度為:O(n2)。分析下面語句段執(zhí)行的時間復雜度。for(i=1;i<=n;i++)for(j=1;j<=i;j++)s++;答:時間復雜度為:O(n2)。分析下面語句段執(zhí)行的時間復雜度。i=1;k=0;while(i<=n-1){k+=10*i;i++;答:時間復雜度為:O(n)。}分析下面語句段執(zhí)行的時間復雜度。for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;答:時間復雜度為:O(n3)。線性表習題填空題順序表是指邏輯上相鄰的元素在物理位置上相鄰。線性表中結點間的關系是1:1關系。順序表中提取任意位置的元素,不需要從頭到尾查找,因為順序表具有隨機定位的特點。線性表的元素總數基本穩(wěn)定,且很少進行插入和刪除操作,但要求以最快速度存取線性表中的元素時,應采用順序存儲結構。順序表中訪問某個數值的元素,其時間復雜度均為O(1)。在長度為n的順序表中,插入一個結點,其平均移動元素的個數為n/2。在長度為n的順序表中,刪除結點的時間復雜度為O(n)。如果線性表需要頻繁進行數據的插入與刪除操作,則適合鏈式存儲結構。鏈表相對于順序表的優(yōu)點是插入、刪除方便,不需要移動數據元素。在雙向鏈表中要刪除已知結點p,其時間復雜度為O(1)。在單向鏈表中要在已知結點p之后插入一個新結點,其時間復雜度為O(1)。在單向鏈表中要在已知結點p之前插入一個新結點,其時間復雜度為O(n)。在雙鏈表中,每個結點有兩個指針域,一個指向前驅結點,另一個指向后繼結點。在單鏈表中設置頭結點的作用是便于鏈表上操作的統(tǒng)一性。雙向循環(huán)鏈表中,在p所指的結點之后插入指針f所指的結點,其操作為f->rear=p->rear;f->front=p;f->rear->front=f;p->rear=f。選擇題線性表采用鏈式存儲時,其地址(D)。A.必須是連續(xù)的B.部分地址必須是連續(xù)的C.一定是不連續(xù)的D.連續(xù)與否均可以用單鏈表方式存儲的線性表,存儲每個結點需要兩個域,一個是數據域,另一個是(B)。A.當前結點所在的地址域B.指針域C.空指針域D.空閑域單向鏈表的存儲密度(C)。A.大于1B.等于1C.小于1D.不能確定已知一個順序存儲的線性表,設每個結點占m個存儲單元,若第一個結點的地址為B,則第i個結點的地址為(A)。A.B+(i-1)×mB.B+i×mC.B-i×mD.B+(i+1)×m不帶頭結點的單鏈表head為空的判斷條件是(A)。A.head==NULLB.head>next==NULLC.head->data==NULLD.head!=NULL設front,rear分別為循環(huán)雙向鏈表結點的左指針和右指針,則指針p所指的元素是雙循環(huán)鏈表head的尾元素的條件是(D)。A.p==headB.p->front==headC.p==NULLD.p->rear==head在一個單鏈表中,已知q所指結點是p所指結點的前驅結點,若在p和q之間插入s結點,則執(zhí)行(A)。A.s->next=p;q->next=s;B.p->next=s->next;s->next=p;C.p->next=s->next;s->next=p;D.p->next=s;p->next=s;兩個指針p和q,分別指向單向鏈表的兩個元素,p是q的前驅條件是(B)。A.p->next==q->nextB.p->next==qC.q->next==pD.p==q用鏈表存儲的線性表,其優(yōu)點是(C)。A.便于隨機存取B.花費的存儲空間比順序表少C.便于插入和刪除D.數據元素的物理順序與邏輯順序相同一個單鏈表中,若刪除p所指結點的后繼結點,則執(zhí)行(A)。A.p=p->next->next;B.p=p->next;p->next=p->next->next;C.p->next=p;D.p=p->next->next;在n個結點的順序表中,算法的時間復雜度是O(1)的操作是(A)。A.訪問第i個結點(1≤i≤n)和求第i個結點的直接前驅(2≤i≤n)B.在第i個結點后插入一個新結點(1≤i≤n)C.刪除第i個結點(1≤i≤n)D.將n個結點從小到大排序用鏈表表示線性表的優(yōu)點是(B)。A.便于隨機存取B.便于進行插入和刪除操作C.占用的存儲空間較順序表少D.元素的物理順序與邏輯順序相同下面關于線性表的敘述中,錯誤的是(B)。A.線性表采用順序存儲必須占用一片連續(xù)的存儲單元B.線性表采用順序存儲便于進行插入和刪除操作C.線性表采用鏈式存儲不必占用一片連續(xù)的存儲單元D.線性表采用鏈式存儲便于進行插入和刪除操作在下列鏈表中不能從當前結點出發(fā)訪問到其余各結點的是(C)。A.雙向鏈表B.單循環(huán)鏈表C.單向鏈表D.雙向循環(huán)鏈表在順序表中,只要知道(D),就可以求出任一結點的存儲地址。A.任意位置結點地址B.結點大小C.向量大小D.基地址和結點大小簡答題線性表有兩種存儲結構:一是順序表,二是鏈表,簡述它們各自的優(yōu)缺點。答:順序表的存儲結構是使用連續(xù)的存儲空間存儲數據元素,優(yōu)點是隨機訪問速度快,可以通過下標直接訪問元素,缺點是插入和刪除操作需要移動大量元素,空間利用率低。鏈表的存儲結構是使用指針將數據元素鏈接在一起,優(yōu)點是插入和刪除操作方便高效,不需要移動大量元素,缺點是訪問元素需要遍歷鏈表,時間復雜度較高。試描述頭指針,頭結點開始結點的區(qū)別,并說明頭指針和頭結點的作用。答:頭指針是指向鏈表頭部的指針變量,用來記錄鏈表的起始位置。頭結點是在鏈表頭部之前增加的一個結點,用來存儲一些附加信息,如鏈表長度等。頭指針的作用是用來操作鏈表的各種操作,而頭結點的作用是為鏈表的操作提供方便,可以避免一些特殊情況的處理。何時選用順序表,何時選用鏈表作為線性表的存儲結構為宜?答:選擇順序表還是鏈表作為線性表的存儲結構,取決于實際需求。當線性表的長度固定且需要頻繁隨機訪問元素時,使用順序表更合適。當線性表的長度不固定且需要頻繁插入、刪除操作時,使用鏈表更合適。另外,順序表的存儲需要連續(xù)的存儲空間,而鏈表的存儲可以靈活利用存儲空間。在單鏈表,雙鏈表和單循環(huán)鏈表中,若僅知道指針p指向某結點,不知道頭指針,能否將結點p從相應的鏈表中刪去?若可以,其時間復雜度各為多少?答:如果僅知道指針p指向某個結點,不知道頭指針,是無法直接刪除結點p的,因為無法找到待刪除結點的前一個結點。需要知道頭指針才能進行刪除操作。時間復雜度為O(n),其中n為鏈表的長度,需要遍歷整個鏈表來找到待刪除結點的前一個結點。在順序表中插入和刪除個結點需要平均移動多少個結點?具體的移動次數取決于哪兩個因素?答:在順序表中插入和刪除一個結點,平均分別需要移動n/2和(n-1)/2個結點,其中n為順序表的長度。具體的移動次數取決于插入或刪除操作的位置和順序表中元素的個數。插入操作需要移動插入位置之后的元素,刪除操作需要移動刪除位置之后的元素。算法設計題已知順序表L,寫一算法將其倒置,例如倒置前為3,6,2,1,7,9,倒置后為9,7,1,2,6,3。答:參照算法2-20鏈表倒置的算法,只需要在遍歷順序表過程中將順序表中的元素按照前后位置交換即可。設有帶頭結點的單向鏈表,head為指向頭結點的指針。設計算法:實現在值為key的結點前插入值為y的結點。若值為key結點不存在,則將值為y的結點插在鏈表的最后,作為尾結點。答:voidinsertNode(ListNode*head,intkey,inty){ListNode*prev=head;ListNode*curr=head->next;//遍歷鏈表,找到值為key的結點或鏈表的最后一個結點while(curr!=null&&curr->data!=key){prev=curr;curr=curr->next;}//創(chuàng)建新的結點ListNode*newNode=newListNode(y);newNode->next=curr;//在值為key的結點前插入新的結點prev->next=newNode;//如果curr為空,說明key不存在,將新結點插在鏈表的最后if(curr==NULL){prev->next=newNode;}}編寫算法,刪除單鏈表的表頭結點與表尾結點。答:參考算法2-14鏈表中刪除指定值的結點的算法。寫出函數用于刪除元素遞增排列的帶頭結點單鏈表L中值大于min且小于max的所有元素,并給出其時間復雜度。答:voiddeleteRange(ListNode*head,intmin,intmax){ListNode*prev=head;ListNode*curr=head->next;while(curr!=null){if(curr->val>min&&curr->val<max){prev->next=curr->next;deletecurr;curr=prev->next;}else{prev=curr;curr=curr->next;}}}設單向鏈表中結點按有序鏈接,設計算法:刪除鏈表中值相同的結點,使之只保留一個。答:參考算法2-21鏈表刪除重復結點的算法。對給定的帶頭結點的單鏈表L,編寫一個刪除L中值為key的結點的直接前驅結點的算法。答:參考2-14鏈表中刪除指定值的結點的算法。有兩個循環(huán)單鏈表,鏈頭指針分別為head1和head2,編寫一個函數將鏈表head1鏈接到鏈表head2,鏈接后的鏈表仍是循環(huán)鏈表。答:voidlinkCircularLists(ListNode*head1,ListNode*head2){ListNode*curr1=head1->next;ListNode*curr2=head2->next;while(curr1->next!=head1){curr1=curr1->next;}while(curr2->next!=head2){curr2=curr2->next;}curr1->next=head2;curr2->next=head1;}有一個由整數構成的單鏈表長度為n,試編寫算法,將單鏈表分解成兩個,一個只由奇數構成,另一個只由偶數構成。答:voidsplitOddEven(ListNode*head,ListNode**oddHead,ListNode**evenHead){ListNode*oddTail=null;ListNode*evenTail=null;ListNode*curr=head;while(curr!=null){if(curr->data%2==0){//當前節(jié)點的值為偶數if(*evenHead==null){//如果evenHead為空,說明是第一個偶數節(jié)點*evenHead=curr;evenTail=curr;}else{//否則,將當前偶數節(jié)點鏈接到偶數鏈表的末尾evenTail->next=curr;evenTail=curr;}}else{//當前節(jié)點的值為奇數if(*oddHead==null){//如果oddHead為空,說明是第一個奇數節(jié)點*oddHead=curr;oddTail=curr;}else{//否則,將當前奇數節(jié)點鏈接到奇數鏈表的末尾oddTail->next=curr;oddTail=curr;}}curr=curr->next;}//將奇數鏈表和偶數鏈表的末尾設置為null,表示鏈表的結束if(oddTail!=null){oddTail->next=null;}if(evenTail!=null){evenTail->next=null;}}設帶頭結點的單向鏈表,將鏈表中所有的偶數結點刪除。答:參照算法2-21鏈表刪除重復結點的算法。設某單鏈表中,存在多個結點其數據值均為key,試編寫一算法統(tǒng)計該類結點的個數。答:參照圖2-9查找結點的算法,只需要將鏈表遍歷到尾部即可,遍歷的過程中進行統(tǒng)計結點的個數。若循環(huán)單鏈表長度大于1,p為指向鏈表中某結點的指針,試編寫一算法刪除p結點的前驅結點。答:參考2-14鏈表中刪除指定值的結點的算法。不同的是,不僅需要查找到P結點的前驅結點q,同時還需要查找q結點的前驅結點s,便于刪除q結點后,調整鏈表,也就是設置s的后繼結點變?yōu)閜。試寫一算法,將兩個有序表合并為一個有序表。答:參考2-17有序表合并的算法。棧習題填空題在棧結構中,允許插入、刪除的一端稱為棧頂。棧是一種先進后出線性表。在有n個元素的棧中,進棧操作時間復雜度為O(1)。若進棧的次序是A,B,C,D,E,執(zhí)行3次出棧操作以后,棧頂元素為B。三個元素6,8,4順序進棧,執(zhí)行兩次Pop(s,x)運算后,x的值是8。設有編號為1,2,3,4的四輛列車,順序開入棧式結構的站臺,則可能的出棧序列有14種。一個棧的輸入序列是1,2,3,..,n,輸出序列的第一個元素是n,則第i個輸出元素為i。在順序棧中,當棧頂指針的值為-1時,表示空棧。已知順序棧s,在對s進棧操作之前首先要判斷棧滿。在順序棧中,當有元素入棧時,首先棧頂指針加1,然后元素再入棧。在順序棧中,刪除元素,需要將棧頂指針減1。已知中綴表達式,求它的后綴表達式,是棧的典型應用。在一個鏈式棧中,若棧頂指針等于NULL則為空棧;向棧頂指針為top的鏈棧中插入結點時,應該先判斷top是否為空。向一個棧頂指針為top的鏈棧中,插入一個新結點p時,應執(zhí)行p->next=top和top=p的語句。從一個棧刪除元素時,首先取出棧頂元素,然后再移動棧頂指針。向一個棧頂指針為top的鏈棧中,刪除結點,應執(zhí)行s=top和top=top->next的語句。8+7-6/2+3^2-5的后綴表達式是87+62/-32^+5-。選擇題常用于函數調用的數據結構是(A)。A.棧 B.隊列C.鏈表 D.數組在棧中進行插入和刪除操作的位置是(A)。A.棧頂B.任意位置C.棧底D.與元素有關設一數列的輸入順序為1,2,3,4,5,6,通過棧操作不可能排成的輸出序列為(B)。A.3,2,5,6,4,1B.1,5,4,6,2,3C.2,4,3,5,1,6D.4,5,3,6,2,1如果以鏈表作為棧的存儲結構,則出棧操作時(B)。A.必須判別棧是否滿B.必須判別棧是否為空C.必須判別棧元素類型D.棧不做任何判別順序棧存儲空間的實現使用(B)存儲元素。A.鏈表B.數組C.循環(huán)鏈表D.變量一個順序棧一旦被聲明,其占用空間的大小(A)。A.已固定B.不固定C.可以改變D.動態(tài)變化鏈棧與順序棧相比,有一個比較明顯的優(yōu)點是(B)。A. 插入操作更加方便B.通常不會出現棧滿的情況C.不會出現??盏那闆rD.刪除操作更加方便從棧頂指針為top的鏈棧中刪除一個結點時,用x保存被刪除的結點,應執(zhí)行下列(D)語句。A.x=top;top->next;B.top=top->next;x=top->dataC.x=top->data;D.x=top->data;top=top->next在一個棧頂指針為HS的鏈棧中,將一個s指針所指的結點入棧,應執(zhí)行下列(C)語句。A.HS->next=sB.s->next=HS->next;HS->next=s;C.s->next=HS;HS=s;D..s->next=HS=HS->next4個元素按A,B,C,D順序進棧s,執(zhí)行兩次Pop(s,x)運算后,棧頂元素的值是(B)。A.AB.BC.CD.D元素A,B,C,D依次進棧以后,棧底元素是(A)。A.AB.BC.CD.D經過InitStack(s),Push(s,a),Push(s,b)Pob(s)的運算后,再執(zhí)行ReadTop(s)的值是(A)。A.aB.bC.1D.0經過下列棧的運算后,x的值是(B)。InitStack(s)(初始化棧);Push(s,a);Push(s,b);ReadTop(s);Pob(s,x);A. aB.bC.1D.0經過下列棧的運算后,EmptySeque(s)的值是(C)。InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x);A.aB.bC.1D.0向順序棧中輸入元素時(B)。A.先存入元素,后移動棧頂指針B.先移動棧頂指針,后存入元素C.誰先誰后無關緊要D.同時進行初始化一個空間大小為5的順序棧s后,s->top的值是(B)。A.0B.-1C.不再改變D.動態(tài)變化設有一個入棧的次序A,B,C,D,E的序列,則棧不可能的輸出序列是(C)。A.EDCBAB.DECBAC.DCEABD.ABCDE設有一個順序棧s,元素A,B,C,D,E,F依次進棧,如果6個元素出棧的順序是B,D,C,F,E,A,則棧的容量至少應是(A)。A.3B.4C.5D.6綜合應用題在棧的輸入端元素的輸入順序為1,2,3,4,5,6,進棧過程中可以退棧,則退棧時能否排成序列3,2,5,6,4,1和1,5,4,6,2,3,若能,寫出進棧、退棧過程;若不能,簡述理由。采用用push(x)表示x進棧,pop(x)表示x退棧。答:push(1),push(2),push(3),pop(3),pop(2),push(4),push(5),pop(5),push(6),pop(6),pop(4),pop(1)。所以可以得到序列3,2,5,6,4,1。push(1),pop(1),push(2),push(3),push(4),push(5),pop(5),pop(4),push(6),pop(6),,下一個出棧的是3,而不是2,所以不能得到序列1,5,4,6,2,3。給出表達式“84*32+-”的求值過程以及結果。答:創(chuàng)建一個空棧。從左到右遍歷后綴表達式:遇到操作數8,將其壓入棧中:棧=[8]遇到操作數4,將其壓入棧中:棧=[8,4]遇到操作符*,從棧中彈出兩個操作數4和8,計算8*4=32,并將結果32壓入棧中:棧=[32]遇到操作數3,將其壓入棧中:棧=[32,3]遇到操作數2,將其壓入棧中:棧=[32,3,2]遇到操作符+,從棧中彈出兩個操作數2和3,計算2+3=5,并將結果5壓入棧中:棧=[32,5]遇到操作符-,從棧中彈出兩個操作數5和32,計算32-5=27,并將結果27壓入棧中:棧=[27]遍歷完后綴表達式后,棧中的唯一元素27即為表達式的求值結果。因此,給定后綴表達式“84*32+-”的求值結果為27。編寫一個算法,檢查字符串“(x=0)[x=1](x++)[x=x-5](x=0))“中的方括號和圓括號是否配對,若能夠全部配對則返回1,否則返回0。答:intcheckParentheses(){stack<char>parenthesesStack;boolisBalanced=true;strings="(x=0)[x=1](x++)[x=x-5](x=0)";for(charc:s){if(c=='('||c=='['){parenthesesStack.push(c);}elseif(c==')'||c==']'){if(parenthesesStack.empty()){isBalanced=false;break;}else{chartop=parenthesesStack.top();parenthesesStack.pop();if((c==')'&&top!='(')||(c==']'&&top!='[')){isBalanced=false;break;}}}}if(!parenthesesStack.empty()){isBalanced=false;}returnisBalanced?1:0;}編寫一算法將中綴表達式轉換為后綴表達式。答:參考3-13表達式求值算法中將中綴表達式轉換為后綴表達式的算法。編寫一算法求解后綴表達式的值。答:參考3-13表達式求值算法。隊列習題填空題隊列是一種特殊,只允許在端點操作的線性表。在隊列中存取數據應遵循的原則是先進先出。棧和隊列的區(qū)別僅在于插入和刪除位置不相同。隊列在邏輯結構上屬線性結構。隊列允許插入的一端稱為隊尾,允許刪除的一端稱為隊首。順序隊列中在出隊操作時,首先要判斷隊列是否為空。順序隊列中入隊操作時,首先需要判斷隊列是否為滿。順序存儲的隊列如果不采用循環(huán)方式,則會出現假溢出問題。循環(huán)隊列的隊頭指針為front,隊尾指針為rear,則隊列中共有(rear-front+N)%N個元素。循環(huán)隊列的隊頭指針為front,隊尾指針為rear,則隊空的條件為front=rear。鏈隊列q為空的條件是q->front=q->rear。在具有n個單元且采用順序存儲的循環(huán)隊列中,隊滿時共有n-1個元素。若front和rear分別表示循環(huán)隊列q的頭指針和尾指針,m表示該隊列的最大容量,則循環(huán)隊列為空的條件(rear-front+m)%m==0。對帶頭結點的鏈隊列q,判定隊列中只有一個數據元素的條件是q->front->next=q->rear。設循環(huán)隊列的容量為100(序號0~99),現經過一系列的入隊和出隊的運算后,front=13,rear=39,則循環(huán)隊列中還有26個元素。選擇題隊列是限定在(D)進行操作的線性表。A.中間者B.隊首C.隊尾D.端點在鏈隊列中執(zhí)行入隊操作,(D)。A.需判別隊列是否空 B.需判別隊列是否滿C.限制鏈表頭p進行 D.限制在鏈表尾p進行在一個順序存儲的循環(huán)隊列中,隊首指針指向隊首元素的(A)。A.前一個位置B.后一個位置C.隊首元素位置D.任意位置一個循環(huán)隊列一旦說明,其占用空間的大小(A)。A.固定B.可以變動C.不能固定D.動態(tài)變化順序隊列占用的空間(A)。A.必須連續(xù)B.不必連續(xù)C.不能連續(xù)D.可以不連續(xù)容量為10個元素的順序循環(huán)隊列用數組data來存儲,則data數組的下標范圍是(B)。A.0~10B.0~9C.1~9D.1~104個元素按A,B,C,D順序連續(xù)入隊列q,執(zhí)行3次QutQueue(q)操作后,再執(zhí)行EmptyQueue(q);后的值是(A)。A.0B.1C.2D.3在鏈隊列中,結點的結構:data為數據域,next為指針域,rear和front分別指向隊尾和隊首,則在鏈隊列中出隊后的結點由指針s所指,則應執(zhí)行下列(C)操作。A.s=front->next;front->next=sB.front->next=sC.s=front;front=front->nextD.s->next=front;front=s若進隊列的序列為A,B,C,D,則出隊的序列是(C)。A.B,C,D,AB.A,C,B,DC.A,B,C,DD.C,B,D,A若用一個大小為10數組來實現循環(huán)隊列,且當前front和rear的值分別為3和0,當從隊列中刪除一個元素,再加入兩個元素后,front和rear的值分別為(B)。A.5和1B.4和2C.2和4D.1和5簡答題試舉出幾個生活中的例子,其操作規(guī)律符合隊列的操作特征。答:銀行柜臺辦理業(yè)務:在銀行柜臺,顧客按照先來后到的順序等待辦理業(yè)務。每個顧客辦理完業(yè)務后,下一個顧客才能進入柜臺。這也符合隊列的先進先出的特性。打印隊列:當我們在打印多個文件時,打印任務會按照提交的順序排隊等待執(zhí)行。打印機會先處理隊列中的第一個任務,然后才會處理后面的任務。這也是隊列的典型應用場景。汽車排隊進入收費站:在高速公路的收費站,汽車會按照到達的順序排隊等待進入收費站。每個汽車依次從隊列中進入收費站,然后交費離開。這也是隊列的一個應用場景。簡單描述隊列、隊頭、隊尾、空隊列、鏈隊列和循環(huán)隊列的概念。答:隊列(Queue)是一種具有先進先出(FIFO)特性的線性數據結構。它類似于現實生活中的排隊,新元素被添加到隊列的一端,稱為隊尾(rear),而已存在的元素從隊列的另一端被移除,稱為隊頭(front)。隊頭(Front)是隊列中的第一個元素,它是隊列的入口。當元素被添加到隊列的時候,它成為新的隊尾。當元素從隊列中被移除的時候,隊頭會向后移動。隊尾(Rear)是隊列中的最后一個元素,它是隊列的出口。當元素被添加到隊列的時候,隊尾會向后移動。當元素從隊列中被移除的時候,隊尾保持不變??贞犃校‥mptyQueue)是指沒有任何元素的隊列。在空隊列中,隊頭和隊尾指向同一個位置,即沒有任何元素進入或離開隊列。鏈隊列(LinkedQueue)是使用鏈表實現的隊列。每個節(jié)點都包含一個數據元素和一個指向下一個節(jié)點的指針。鏈隊列可以動態(tài)地增加或刪除節(jié)點,因此沒有固定的大小限制。循環(huán)隊列(CircularQueue)是使用數組實現的隊列。它通過循環(huán)利用數組空間來避免隊列滿時無法繼續(xù)添加元素的問題。在循環(huán)隊列中,隊頭和隊尾可以在數組的開頭和結尾之間循環(huán)移動。線性表、棧、隊列有什么區(qū)別與聯(lián)系?答:線性表是一種線性的數據結構,數據元素按照一定的順序排列。棧和隊列是特殊的線性表。棧是一種后進先出(LIFO)的數據結構,只能在棧頂進行插入和刪除操作。隊列是一種先進先出(FIFO)的數據結構,只能在隊尾插入元素,在隊頭刪除元素。操作特性:線性表可以在任意位置插入和刪除元素。棧只能在棧頂進行插入和刪除操作,而且只能訪問棧頂的元素。隊列只能在隊尾插入元素,在隊頭刪除元素,不能訪問隊列中間的元素。使用場景:線性表適用于需要隨機訪問和靈活操作元素的場景。棧適用于需要按照后進先出的順序訪問元素的場景,比如函數調用、表達式求值等。隊列適用于需要按照先進先出的順序訪問元素的場景,比如排隊、任務調度等。什么是順序隊列的上溢現象?什么是順序隊列的假溢出現象?答:順序隊列的上溢現象:當隊列滿時,再進行入隊操作就會導致上溢現象。也就是說,隊列已經沒有空閑空間可以存儲新元素了,但是仍然有新元素要入隊。這種情況下,如果繼續(xù)進行入隊操作,就會導致數據的丟失或覆蓋,因為新的元素無法被正確地存儲到隊列中。順序隊列的假溢出現象:假溢出現象是指隊列中存在空閑空間,但由于前面的元素出隊時,沒有正確地更新隊頭指針,導致隊列判斷為滿的狀態(tài)。也就是說,隊列實際上還有空間可以存儲新元素,但由于隊頭指針沒有及時更新,導致無法進行入隊操作。循環(huán)隊列的優(yōu)點是什么,如何判別循環(huán)隊列的空和滿。答:順序隊列的上溢現象:當隊列滿時,再進行入隊操作就會導致上溢現象。也就是說,隊列已經沒有空閑空間可以存儲新元素了,但是仍然有新元素要入隊。這種情況下,如果繼續(xù)進行入隊操作,就會導致數據的丟失或覆蓋,因為新的元素無法被正確地存儲到隊列中。順序隊列的假溢出現象:假溢出現象是指隊列中存在空閑空間,但由于前面的元素出隊時,沒有正確地更新隊頭指針,導致隊列判斷為滿的狀態(tài)。也就是說,隊列實際上還有空間可以存儲新元素,但由于隊頭指針沒有及時更新,導致無法進行入隊操作。算法設計題設用一維數組data[n]表示一個隊列,實現入隊與出隊的操作算法。答:參考算法4-(1~4)隊列基本算法實現。編寫算法,利用兩個棧s1,s2模擬一個隊列的入隊、出隊和判斷隊列空的運算。答:#defineMAX_SIZE100typedefstruct{intdata[MAX_SIZE];inttop;}Stack;voidinitStack(Stack*s){s->top=-1;}boolisStackEmpty(Stack*s){returns->top==-1;}boolisStackFull(Stack*s){returns->top==MAX_SIZE-1;}voidpush(Stack*s,intitem){if(isStackFull(s)){cout<<"Stackisfull!"<<endl;return;}s->top++;s->data[s->top]=item;}intpop(Stack*s){if(isStackEmpty(s)){cout<<"Stackisempty!”<<endl";return-1;}intitem=s->data[s->top];s->top--;returnitem;}typedefstruct{Stacks1;//用于入隊操作的棧Stacks2;//用于出隊操作的棧}Queue;voidinitQueue(Queue*q){initStack(&q->s1);initStack(&q->s2);}voidenqueue(Queue*q,intitem){push(&q->s1,item);//將元素入棧s1}intdequeue(Queue*q){if(isStackEmpty(&q->s1)&&isStackEmpty(&q->s2)){//如果棧s1和棧s2都為空,則隊列為空cout<<"Queueisempty!"<<endl;return-1;}if(isStackEmpty(&q->s2)){//如果棧s2為空,則將棧s1中的元素依次出棧并入棧s2while(!isStackEmpty(&q->s1)){intitem=pop(&q->s1);push(&q->s2,item);}}intfront=pop(&q->s2);//將s2的棧頂元素出棧并返回returnfront;}boolisQueueEmpty(Queue*q){returnisStackEmpty(&q->s1)&&isStackEmpty(&q->s2);//當s1和s2都為空時,隊列為空}設一個循環(huán)隊列q,只有頭指針front,不設尾指針,另設一個含有元素個數的計數器count,編寫相應的入隊算法和出隊算法。答:#defineMAX_SIZE5typedefstruct{intdata[MAX_SIZE];intfront;intcount;}CircularQueue;voidinitQueue(CircularQueue*q){q->front=0;q->count=0;}boolisQueueEmpty(CircularQueue*q){returnq->count==0;}boolisQueueFull(CircularQueue*q){returnq->count==MAX_SIZE;}voidenqueue(CircularQueue*q,intitem){if(isQueueFull(q)){cout<<"Queueisfull!"<<endl;return;}intrear=(q->front+q->count)%MAX_SIZE;//計算隊尾元素的下標q->data[rear]=item;//將元素放入隊尾q->count++;//計數器加1}intdequeue(CircularQueue*q){if(isQueueEmpty(q)){cout<<"Queueisempty!"<<endl;return-1;}intitem=q->data[q->front];//取出隊頭元素q->front=(q->front+1)%MAX_SIZE;//頭指針向后移動一位q->count--;//計數器減1returnitem;}已知q是一個非空隊列,s是一個空棧。試設計一個算法,利用棧和隊列的基本運算,將隊列q中的全部元素逆置存放。答:#defineMAX_SIZE100typedefstruct{intdata[MAX_SIZE];intfront;intrear;intcount;}Queue;typedefstruct{intdata[MAX_SIZE];inttop;}Stack;voidinitQueue(Queue*q){q->front=0;q->rear=-1;q->count=0;}boolisQueueEmpty(Queue*q){returnq->count==0;}boolisQueueFull(Queue*q){returnq->count==MAX_SIZE;}voidenqueue(Queue*q,intitem){if(isQueueFull(q)){cout<<"Queueisfull!"<<endl;return;}q->rear=(q->rear+1)%MAX_SIZE;//計算隊尾元素的下標q->data[q->rear]=item;//將元素放入隊尾q->count++;//計數器加1}intdequeue(Queue*q){if(isQueueEmpty(q)){cout<<"Queueisempty!"<<endl;return-1;}intitem=q->data[q->front];//取出隊頭元素q->front=(q->front+1)%MAX_SIZE;//頭指針向后移動一位q->count--;//計數器減1returnitem;}voidinitStack(Stack*s){s->top=-1;}boolisStackEmpty(Stack*s){returns->top==-1;}boolisStackFull(Stack*s){returns->top==MAX_SIZE-1;}voidpush(Stack*s,intitem){if(isStackFull(s)){cout<<"Stackisfull!"<<endl;return;}s->top++;//棧頂指針加1s->data[s->top]=item;//將元素放入棧頂}intpop(Stack*s){if(isStackEmpty(s)){cout<<"Stackisempty!"<<endl;return-1;}intitem=s->data[s->top];//取出棧頂元素s->top--;//棧頂指針減1returnitem;}voidreverseQueue(Queue*q){Stacks;initStack(&s);while(!isQueueEmpty(q)){intitem=dequeue(q);push(&s,item);}while(!isStackEmpty(&s)){intitem=pop(&s);enqueue(q,item);}}設循環(huán)隊列q,只設置頭指針和為指針,設計算法求循環(huán)隊列中當前元素的個數。答:#defineMAX_SIZE100typedefstruct{intdata[MAX_SIZE];intfront;intrear;}Queue;voidinitQueue(Queue*q){q->front=0;q->rear=-1;}boolisQueueEmpty(Queue*q){returnq->rear<q->front;}intgetCurrentSize(Queue*q){if(isQueueEmpty(q)){return0;}intsize;if(q->rear>=q->front){size=q->rear-q->front+1;}else{size=q->rear+MAX_SIZE-q->front+1;}returnsize;}串與數組習題填空題在計算機軟件系統(tǒng)中,有兩種處理字符長度的方法,一是可變長度處理,二是固定長度處理。如果s="thisisthefirststring",sub="the",stringdex(s,sub)是8。已知字符串s1="abcdefghijklmnopqrstuvw",由如下運算可得到串s2=Concat(Sub(s1,19,3),Sub(s1,4,2),sub(s1,14,1),Sub(s1,20,1)),則s2tuvefov。兩個串相等的充要條件是長度相等,對應位置的字符也相等。s="xiaotech"所含子串的個數是37。一個10×10的下三角矩陣A采用行優(yōu)先壓縮存儲后,如果首元素a[0][0]是第一個元素,那么a[4][2]是第13個元素。兩個矩陣Amn,Bnp相乘,其時間復雜度為O(m*n*p)。兩個矩陣Amn,Bmn相加,其時間復雜度為O(m*n)。稀疏矩陣采用的壓縮存儲方法是三元組表示法。二維數組A[11][20]采用按行為主序的存儲方式,每個元素占4個存儲單元,若A[0][0]的存儲地址為300,則A[10][10]的地址為1140。選擇題串的邏輯結構與(A)的邏輯結構不同。A.線性表B.隊列C.棧D.樹設有二維數組A[50][60],其元素長度為1個字節(jié),按列優(yōu)先順序存儲,首元素A[0][0]的地址為200,則元素A[10][20]的存儲地址為()。A.820 B.720 C.1210 D.1410一個100×100的下三角形矩陣a采用行優(yōu)先壓縮存儲后,如果首元素a[0][0]是第一個元素,那么a[4][2]是第(A)元素。A.13 B.401 C.402 D.403串的長度是(D)。A.串中不同字符的個數B.串中不同字母的個數

C.串中所含字符的個數n(n>0)D.串中所含字符的個數n(n≥0)設有一個10階的對稱矩陣a,采用壓縮存儲方式,以行序為主存儲,a[0][0]的存儲地址為100,每個元素占1個地址空間,則a[3][2]的地址為(D)。A.102 B.105 C.106 D.108設有兩個串p和q,求q在p中的首次出現的位置的運算稱作(B)。A.連接B.模式匹配C.求子串D.求串長假設有60行70列的二維數組a以列序為主序順序存儲,其基地址為10000,每個元素占2個存儲單元,那么第32行第58列的元素a[31,57]的存儲地址為(A)。A.16902B.16904C.14454D.答案A,B,C均不對下面關于串的敘述中,(B)是不正確的?A.串是字符的有限序列

B.空串是由空格構成的串

C.模式匹配是串的一種重要運算

D.串既可以采用順序存儲,也可以采用鏈式存儲C++語言對數組元素的存放方式通常采用(A)。A.按行為主的存儲結構 B.按列為主的存儲結構C.按行或列為主的存儲結構 D.具體存儲結構無法確定二維數組A[n][m]以列優(yōu)先順序存儲,數組A中每個元素占用1個字節(jié),A[1][1]為首元素,其地址為0,則元素A[i][j]的地址為(B)。A.(j-1)×m+(j-1) B.(j-1)×n+(i-1)C.(j-1)×n+i D.j×n+i簡答題簡述下列每對術語的區(qū)別。空串和空格串。答:空串是指一個沒有任何字符的字符串,長度為0。空格串是指只包含空格字符的字符串,長度大于等于1串變量和串常量。答:串變量是在程序中定義的一個變量,用來存儲字符串的值??梢酝ㄟ^賦值操作來改變串變量的值。串常量是在程序中直接指定的一個字符串值,不可修改。通常用引號括起來表示,例如“hello”。主串和子串。答:主串是指一個完整的字符串,可以包含子串。子串是主串中的一個連續(xù)的字符序列。變量的名字和串變量的值。答:串變量的名字是程序中定義的標識符,用來表示一個存儲字符串值的變量。串變量的值是存儲在該變量中的字符串值。可以通過賦值操作來改變串變量的值。設有二維數組A(6×8),每個元素占6個字節(jié)存儲,順序存放,A的起地址為1000,計算:(1)數組A的體積(即存儲量);(2)數組的最后一個元素A的起地址;(3)按行優(yōu)先存放時,元素a14的地址是多少;(4)按列優(yōu)先存放時,元素a47的地址。答:存儲容量為:(1)6*8*6=1288。(2)1000+(6*8-1)*6=2282(3)1000+(8+4)*6=1072(4)1000+(6*7+4)*6=1276算法設計題寫一個算法來實現字符串逆序存儲,要求不另設串存儲空間。答:參考第二章順表表的逆置算法。設s、t為兩個字符串,分別放在兩個一維數組中,m、n分別為其長度,判斷t是否為s的子串。如果是,輸出子串所在位置(第一個字符),否則輸出-1。答:參考法5-4Brute-Force模式匹配算法編寫程序,統(tǒng)計在輸入字符串中各個不同字符出現的頻度并將結果存入文件(字符串中的合法字符為A-Z這26個字母和0-9這10個數字)。答:voidcountFrequency(conststd::string&input){unordered_map<char,int>frequency;//統(tǒng)計字符頻度for(charc:input){c=toupper(c);//將字符轉換為大寫字母if(isalnum(c)){//只處理字母和數字字符frequency[c]++;}}//將結果存入文件ofstreamfile("result.txt");if(!file){cout<<"無法打開文件。\n";return;}file<<"字符\t頻度\n";for(charc='A';c<='Z';c++){file<<c<<"\t"<<frequency[c]<<"\n";}for(charc='0';c<='9';c++){file<<c<<"\t"<<frequency[c]<<"\n";}cout<<"結果已保存到result.txt文件中。\n";}}試編寫算法實現將字符串s中所有值為c的字符換成值為d的字符。答:參考算法5-7文本匹配算法。試編寫算法實現將字符串s中所有值為s1的子串替換成值為s2的子串。答:參考算法5-7文本匹配算法。從串s中刪除其值等于c的所有字符。答:參考第二章刪除重復元素的算法。試編寫算法實現將字符串s中所有值為s1的子串刪除。答:voiddeleteSubstring(char*s,constchar*s1){ints1Len=strlen(s1);char*p=s;while((p=strstr(p,s1))!=NULL){memmove(p,p+s1Len,strlen(p+s1Len)+1);}}樹與二叉樹習題一、填空題一個結點所擁有的子樹數稱為該結點的度。度為零的結點稱為葉子結點。對于二叉樹來說,第i層上至多有2i-1個結點。56個結點的完全二叉樹有28個葉子結點。深度為8的二叉樹最多有255個結點。有8個結點的二叉樹最大深度為8。前序為A,B,C且后序C,B,A的二叉樹共有4種。已知完全二叉樹的第8層有8個結點,則其葉結點數是68。中序為A,B,C且后序C,B,A的二叉樹共有1種。樹與二叉樹之間最主要的差別是:二叉樹中各結點的子樹要區(qū)分為左子樹和右子樹。由一個二叉樹的前序序列和后序列不能確定這個二叉樹。有30個結點的完全二叉樹,編號為11的結點的父結點的編號是5。哈夫曼樹是帶權路徑長度最短的二叉樹。由樹轉換二叉樹時,其二叉樹沒有右子樹。采用二叉鏈表存儲的20個結點的二叉樹,一共有21個空指針域。若用鏈表存儲一個二叉樹時,每個結點除數據域外,還有指向左孩子和右孩子的兩個指針。在這種存儲結構中,n個結點的二叉樹共有___2n____個指針域,其中有n-1個指針域是存放了地址,有n+1個指針是空指針。中序遍歷二叉排序樹所得到的序列是有序序列(填有序或無序)。設哈夫曼樹中共有99個結點,則該樹中有50個葉子結點;若采用二叉鏈表作為存儲結構,則該樹中有100個空指針域。設一個二叉樹中有50個度數為0的結點,21個度數為1的結點,則該二叉樹總的結點個數為120個。設某二叉樹有100個結點,則該二叉樹的深度最小為7,最大為100。選擇題樹最適合用來表示(D)。A.無序數據元素B.無關系數據元素C.元素間多種聯(lián)系的數據D.元素間有分支的層次關系在一個具有五層的滿二叉樹中,結點的個數為(B)。A.16B.31C.32D.33具有64個結點的完全二叉樹的深度為(C)。A.5B.6C.7D.8任何一個二叉樹的葉結點在前序、中序、后序遍歷序列中的相對次序(A)。A.不發(fā)生改變B.發(fā)生改變C.不能確定D.以上都不對A,B為一個二叉樹上的兩個結點,在中序遍歷時,A在B前的條件是(C)。A.A在B右方B.A是B祖先C.A在B左方D.A是B子孫二叉樹的葉結點個數比度為2的結點的個數(C)。A.無關B.相等C.多一個D.少一個一個二叉樹的后序遍歷序列為ADBEC,中序遍歷序列為AEBDC,則前序遍歷序列為(D)。A.DCBEAB.AECDBC.AEDBCD.CEABD將一個有100個結點的完全二叉樹從上到下,從左到右依次對結點編號,根結點的編號為1,則編號為45的結點的左孩子編號為(C)。A.46B.47C.90D.91二叉樹按某種順序線索化后,任一結點不一定有指向其前驅和后繼的線索,這種說法(A)。A.正確B.錯誤C.不確定D.都有可能下列陳述正確的是(A)。A.二叉樹是度為2的有序樹B.二叉樹中結點只有一個孩子時無左右之分C.二叉樹必有度為2的結點D.二叉樹中最多只有兩個子樹,且有左右子樹之分用5個權值{3,2,4,5,1}構造的哈夫曼樹的帶權路徑長度是(B)。A.32B.33C.34D.15在樹結構中,若結點B有4個兄弟,A是B的父親結點,則A的度為(C)。A.3B.4C.5D.6依據給定的權值,構造的哈夫曼是唯一的。這種說法(B)。A.正確B.錯誤C.不確定D.都有可能哈夫曼樹中無度為1的結點,這種說法(A)。A.正確B.錯誤C.不確定D.都有可能線索二叉樹中無空指針存在,這種說法(B)。A.正確B.錯誤C.不確定D.都有可能一個二叉樹的前序序列和后序序列正好相反,則該二叉樹一定是(C)的二叉樹A.空或只有一個結點B.任一結點無左子樹C.高度等于其結點數D.任一結點無右子樹引入二叉線索樹的目的是(A)A.加快查找結點的前驅或后繼的速度B.為了能在二叉樹中方便地進行插入與刪除C.為了提高空間利用率D.為了向上查找雙親結點線索二叉樹是一種(C)結構。A.邏輯B.存儲結構C.為了能方便地找到雙親D.使二叉樹的遍歷結果唯一二叉樹在線索后,仍不能有效求解的問題是(A)。A.先序線索二叉樹中求先序后繼B.中序線索二叉樹中求中序后繼C.中序線索二叉樹中求中序前驅D.后序線索二叉樹中求后序后繼哈夫曼樹是帶權路徑最短的樹,路徑上權值較大的結點離根較近(A)。A.正確B.錯誤C.不確定D.都有可能三、簡答題描述樹與二叉樹的區(qū)別與聯(lián)系。答:區(qū)別:結構:樹是由節(jié)點和邊組成的非線性結構,每個節(jié)點可以有多個子節(jié)點。而二叉樹是一種特殊的樹結構,每個節(jié)點最多只有兩個子節(jié)點,分別稱為左子節(jié)點和右子節(jié)點。子節(jié)點個數:樹的節(jié)點可以有任意多個子節(jié)點,而二叉樹的節(jié)點最多只有兩個子節(jié)點。排列方式:樹的子節(jié)點之間沒有順序關系,可以以任意方式排列。而二叉樹的左子節(jié)點和右子節(jié)點有固定的順序關系,左子節(jié)點在前,右子節(jié)點在后。聯(lián)系:結構關系:二叉樹是樹的一種特殊情況,可以看作是每個節(jié)點最多只有兩個子節(jié)點的樹。因此,二叉樹也是樹的一種特殊結構。數據表示:樹和二叉樹都可以用多種方式進行表示,常見的表示方法有順序存儲和鏈

溫馨提示

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

評論

0/150

提交評論