2015考研計(jì)算機(jī)數(shù)據(jù)結(jié)構(gòu)測(cè)試題及答案一

字號(hào):

一、選擇題(24分)
    1.下列程序段的時(shí)間復(fù)雜度為( )。
    i=0,s=0; while (s
    (A) O(n1/2) (B) O(n1/3) (C) O(n) (D) O(n2)
    2.設(shè)某鏈表中最常用的操作是在鏈表的尾部插入或刪除元素,則選用下列( )存儲(chǔ)方式最節(jié)省運(yùn)算時(shí)間。
    (A) 單向鏈表 (B) 單向循環(huán)鏈表
    (C) 雙向鏈表 (D) 雙向循環(huán)鏈表
    3.設(shè)指針q指向單鏈表中結(jié)點(diǎn)A,指針p指向單鏈表中結(jié)點(diǎn)A的后繼結(jié)點(diǎn)B,指針s指向被插入的結(jié)點(diǎn)X,則在結(jié)點(diǎn)A和結(jié)點(diǎn)B插入結(jié)點(diǎn)X的操作序列為( )。
    (A) s->next=p->next;p->next=-s; (B) q->next=s; s->next=p;
    (C) p->next=s->next;s->next=p; (D) p->next=s;s->next=q;
    4.設(shè)輸入序列為1、2、3、4、5、6,則通過棧的作用后可以得到的輸出序列為( )。
    (A) 5,3,4,6,1,2 (B) 3,2,5,6,4,1
    (C) 3,1,2,5,4,6 (D) 1,5,4,6,2,3
    5.設(shè)有一個(gè)10階的下三角矩陣A(包括對(duì)角線),按照從上到下、從左到右的順序存儲(chǔ)到連續(xù)的55個(gè)存儲(chǔ)單元中,每個(gè)數(shù)組元素占1個(gè)字節(jié)的存儲(chǔ)空間,則A[5][4]地址與A[0][0]的地址之差為( )。
    (A) 10 (B) 19 (C) 28 (D) 55
    6.設(shè)一棵m叉樹中有N1個(gè)度數(shù)為1的結(jié)點(diǎn),N2個(gè)度數(shù)為2的結(jié)點(diǎn),……,Nm個(gè)度數(shù)為m的結(jié)點(diǎn),則該樹中共有( )個(gè)葉子結(jié)點(diǎn)。
    (A) (B) (C) (D)
    7. 二叉排序樹中左子樹上所有結(jié)點(diǎn)的值均( )根結(jié)點(diǎn)的值。
    (A) < (B) > (C) = (D) !=
    8. 設(shè)一組權(quán)值集合W=(15,3,14,2,6,9,16,17),要求根據(jù)這些權(quán)值集合構(gòu)造一棵哈夫曼樹,則這棵哈夫曼樹的帶權(quán)路徑長(zhǎng)度為( )。
    (A) 129 (B) 219 (C) 189 (D) 229
    9. 設(shè)有n個(gè)關(guān)鍵字具有相同的Hash函數(shù)值,則用線性探測(cè)法把這n個(gè)關(guān)鍵字映射到HASH表中需要做( )次線性探測(cè)。
    (A) n2 (B) n(n+1) (C) n(n+1)/2 (D) n(n-1)/2
    10.設(shè)某棵二叉樹中只有度數(shù)為0和度數(shù)為2的結(jié)點(diǎn)且度數(shù)為0的結(jié)點(diǎn)數(shù)為n,則這棵二叉中共有( )個(gè)結(jié)點(diǎn)。
    (A) 2n (B) n+l (C) 2n-1 (D) 2n+l
    11.設(shè)一組初始記錄關(guān)鍵字的長(zhǎng)度為8,則最多經(jīng)過( )趟插入排序可以得到有序序列。
    (A) 6 (B) 7 (C) 8 (D) 9
    12.設(shè)一組初始記錄關(guān)鍵字序列為(Q,H,C,Y,P,A,M,S,R,D,F(xiàn),X),則按字母升序的第一趟冒泡排序結(jié)束后的結(jié)果是( )。
    (A) F,H,C,D,P,A,M,Q,R,S,Y,X
    (B) P,A,C,S,Q,D,F(xiàn),X,R,H,M,Y
    (C) A,D,C,R,F(xiàn),Q,M,S,Y,P,H,X
    (D) H,C,Q,P,A,M,S,R,D,F(xiàn),X,Y
    二、填空題(48分,其中最后兩小題各6分)
    1. 1. 設(shè)需要對(duì)5個(gè)不同的記錄關(guān)鍵字進(jìn)行排序,則至少需要比較_____________次,至多需要比較_____________次。
    2. 2. 快速排序算法的平均時(shí)間復(fù)雜度為____________,直接插入排序算法的平均時(shí)間復(fù)雜度為___________。
    3. 3. 設(shè)二叉排序樹的高度為h,則在該樹中查找關(guān)鍵字key最多需要比較_________次。
    4. 4. 設(shè)在長(zhǎng)度為20的有序表中進(jìn)行二分查找,則比較一次查找成功的結(jié)點(diǎn)數(shù)有_________個(gè),比較兩次查找成功有結(jié)點(diǎn)數(shù)有_________個(gè)。
    5. 5. 設(shè)一棵m叉樹脂的結(jié)點(diǎn)數(shù)為n,用多重鏈表表示其存儲(chǔ)結(jié)構(gòu),則該樹中有_________個(gè)空指針域。
    6. 6. 設(shè)指針變量p指向單鏈表中結(jié)點(diǎn)A,則刪除結(jié)點(diǎn)A的語(yǔ)句序列為:
    q=p->next;p->data=q->data;p->next=___________;feee(q);
    7. 7. 數(shù)據(jù)結(jié)構(gòu)從邏輯上劃分為三種基本類型:___________、__________和___________。
    8. 8. 設(shè)無向圖G中有n個(gè)頂點(diǎn)e條邊,則用鄰接矩陣作為圖的存儲(chǔ)結(jié)構(gòu)進(jìn)行深度優(yōu)先或廣度優(yōu)先遍歷時(shí)的時(shí)間復(fù)雜度為_________;用鄰接表作為圖的存儲(chǔ)結(jié)構(gòu)進(jìn)行深度優(yōu)先或廣度優(yōu)先遍歷的時(shí)間復(fù)雜度為_________。
    9. 9. 設(shè)散列表的長(zhǎng)度為8,散列函數(shù)H(k)=k % 7,用線性探測(cè)法解決沖突,則根據(jù)一組初始關(guān)鍵字序列(8,15,16,22,30,32)構(gòu)造出的散列表的平均查找長(zhǎng)度是________。
    10. 10. 設(shè)一組初始關(guān)鍵字序列為(38,65,97,76,13,27,10),則第3趟冒泡排序結(jié)束后的結(jié)果為_____________________。
    11. 11. 設(shè)一組初始關(guān)鍵字序列為(38,65,97,76,13,27,10),則第3趟簡(jiǎn)單選擇排序后的結(jié)果為______________________。
    12. 12. 設(shè)有向圖G中的有向邊的集合E={<1,2>,<2,3>,<1,4>,<4,5>,<5,3>,<4,6>,<6,5>},則該圖的一個(gè)拓?fù)湫蛄袨開________________________。
    13. 13. 下面程序段的功能是建立二叉樹的算法,請(qǐng)?jiān)谙聞澗€處填上正確的內(nèi)容。
    typedef struct node{int data;struct node *lchild;________________;}bitree;
    void createbitree(bitree *&bt)
    {
    scanf(“%c”,&ch);
    if(ch=='#') ___________;else
    { bt=(bitree*)malloc(sizeof(bitree)); bt->data=ch; ________;createbitree(bt->rchild);}
    }
    14. 14. 下面程序段的功能是利用從尾部插入的方法建立單鏈表的算法,請(qǐng)?jiān)谙聞澗€處填上正確的內(nèi)容。
    typedef struct node {int data; struct node *next;} lklist;
    void lklistcreate(_____________ *&head )
    {
    for (i=1;i<=n;i++)< p="">
    {
    p=(lklist *)malloc(sizeof(lklist));scanf(“%d”,&(p->data));p->next=0;
    if(i==1)head=q=p;else {q->next=p;____________;}
    }
    }
    三、算法設(shè)計(jì)題(22分)
    1. 1. 設(shè)計(jì)在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上合并排序的算法。
    2. 2. 設(shè)計(jì)在二叉排序樹上查找結(jié)點(diǎn)X的算法。
    3. 3. 設(shè)關(guān)鍵字序列(k1,k2,…,kn-1)是堆,設(shè)計(jì)算法將關(guān)鍵字序列(k1,k2,…,kn-1,x)調(diào)整為堆。
    答案
    一、選擇題
    1.A 2.D 3.B 4.B 5.B 6.D
    7.A 8.D 9.D 10.C 11.B 12.D
    二、填空題
    1. 1. 4,10
    2. 2. O(nlog2n),O(n2)
    3. 3. n
    4. 4. 1,2
    5. 5. n(m-1)+1
    6. 6. q->next
    7. 7. 線性結(jié)構(gòu),樹型結(jié)構(gòu),圖型結(jié)構(gòu)
    8. 8. O(n2), O(n+e)
    9. 9. 8/3
    10. 10. (38,13,27,10,65,76,97)
    11. 11. (10,13,27,76,65,97,38)
    12. 12. 124653
    13. 13. struct node *rchild,bt=0,createbitree(bt->lchild)
    14. 14. lklist,q=p
    三、算法設(shè)計(jì)題
    1. 1. 設(shè)計(jì)在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上合并排序的算法。
    void mergelklist(lklist *ha,lklist *hb,lklist *&hc)
    {
    lklist *s=hc=0;
    while(ha!=0 && hb!=0)
    if(ha->datadata){if(s==0) hc=s=ha; else {s->next=ha; s=ha;};ha=ha->next;}
    else {if(s==0) hc=s=hb; else {s->next=hb; s=hb;};hb=hb->next;}
    if(ha==0) s->next=hb; else s->next=ha;
    }
    2. 2. 設(shè)計(jì)在二叉排序樹上查找結(jié)點(diǎn)X的算法。
    bitree *bstsearch1(bitree *t, int key)
    {
    bitree *p=t;
    while(p!=0) if (p->key==key) return(p);else if (p->key>key)p=p->lchild; else p=p->rchild;
    return(0);
    }
    3. 3. 設(shè)關(guān)鍵字序列(k1,k2,…,kn-1)是堆,設(shè)計(jì)算法將關(guān)鍵字序列(k1,k2,…,kn-1,x)調(diào)整為堆。
    void adjustheap(int r[ ],int n)
    {
    int j=n,i=j/2,temp=r[j-1];
    while (i>=1) if (temp>=r[i-1])break; else{r[j-1]=r[i-1]; j=i; i=i/2;}
    r[j-1]=temp;
    }