河北科技大学——数据结构课后习题
有需要河北科技大學(xué)計(jì)算機(jī)專碩考研真題的同學(xué),私信留下郵箱即可。
第一章、緒論作業(yè)
一、填空題
1.算法的時(shí)間復(fù)雜度除了與問題的規(guī)模有關(guān)外,還與待處理的數(shù)據(jù)的(待處理數(shù)據(jù)的初態(tài) )有關(guān)。
2.把長(zhǎng)度為n的單鏈表鏈接在長(zhǎng)度為m的單鏈表之后的算法,其時(shí)間復(fù)雜度為( O(m) )。
3.假設(shè)時(shí)間復(fù)雜度為O(nlogn)的算法在有256個(gè)元素的數(shù)組上運(yùn)行需要4ms,則在具有512個(gè)元??? 素的數(shù)組上運(yùn)行需要( 9 )ms。
解析:此題可按照比例計(jì)算,將256和512分別代入時(shí)間復(fù)雜度計(jì)算公式然后分別比上自己需要的時(shí)間,即可求出具有512個(gè)元素的數(shù)組運(yùn)行所需要的時(shí)間。這里的logn是以2為底的對(duì)數(shù),還有一種解法:設(shè)一個(gè)系數(shù)k,根據(jù)k*256log256=4,即可求出k的值,然后再代入計(jì)算k*512log512即可得出運(yùn)行時(shí)間。
二、分析算法時(shí)間復(fù)雜度
設(shè)n是偶數(shù),下面程序段中語句y=y+i*j的執(zhí)行次數(shù)是多少?該算法的時(shí)間復(fù)雜度是多少?要求列出計(jì)算公式。?
for (i=1;i<=n;i++)if(2*i<=n)for (j=2*i; j<=n; j++)y=y+i*j;解析:總執(zhí)行次數(shù)為:(n-1)+(n-3)+...+3+1=n2/4;算法時(shí)間復(fù)雜度O(n^2)。這個(gè)題做的時(shí)候就是列出語句的執(zhí)行次數(shù),然后自己去找規(guī)律。
第二章、線性表作業(yè)
一、選擇題 1.對(duì)順序存儲(chǔ)的線性表,設(shè)其長(zhǎng)度為 20,在任何位置上插入或刪除操作都是等概率的。插入 一個(gè)元素時(shí)平均要移動(dòng)表中的(A)個(gè)元素。 A.10 ? ? ? ? ???????????????????? B.9? ? ? ? ? ? ? ? ? ? ? ? ? ?? C.11 ? ? ? ? ? ?? ? ? ?? D.12 2、若某線性表中最常用的操作是在最后一個(gè)元素之后插入一個(gè)元素和刪除第一個(gè)元素,則采 用(D)存儲(chǔ)方式最節(jié)省運(yùn)算時(shí)間。 A.單鏈表???? ?? B.僅有頭指針的單循環(huán)鏈表 ? ??? C.雙鏈表 ? ? ? D.僅有尾指針的單循環(huán)鏈表?? 3、對(duì)線性表采用折半查找法,該線性表必須(B)。 A.采用順序存儲(chǔ)結(jié)構(gòu) ? ? ? ? ? ? ??????????????????? B.采用順序存儲(chǔ)結(jié)構(gòu),且元素按值有序 C.采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? D.采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),且元素按值有序 4.線性表采用鏈?zhǔn)酱鎯?chǔ)時(shí),其地址(D) 。 A. 必須是連續(xù)的?? B. 部分地址必須是連續(xù)的?? C. 一定是不連續(xù)的??? D. 連續(xù)與否均可以 5.對(duì)順序存儲(chǔ)的線性表,設(shè)其長(zhǎng)度為 n,在任何位置上插入或刪除操作都是等概率的。插入 一個(gè)元素時(shí)平均要移動(dòng)表中的(A)個(gè)元素。 A. n/2????????????????? B.(n+1)/2?????????????????? C.(n-1)/2 ? ? ? ? ? ? ? ? ? ?? D. n 6.在有 15 個(gè)元素的順序表中,刪除一個(gè)元素時(shí),平均移動(dòng)元素的次數(shù)為(B)。 A.14 ? ? ? ? ? ? ? ?? B.7???????????????????????? C.15 ? ? ? ? ? ? ? ? ? ? ? ?? D.8
二、填空題
1、帶頭結(jié)點(diǎn)的循環(huán)鏈表L為空的條件是???L->next==L ?????????????。
2.存取結(jié)構(gòu)是在一個(gè)數(shù)據(jù)結(jié)構(gòu)上對(duì)查詢操作的時(shí)間性能的一種描述,通常有兩種存取結(jié)構(gòu):順序存取和?隨機(jī)存取 ?。(還有索引存取和散列存取,共4種存取結(jié)構(gòu)。)
3.將長(zhǎng)度為n的單鏈表鏈接在長(zhǎng)度為m的單鏈表之后的算法,其時(shí)間復(fù)雜度度為??O(m) ?。
4.在循環(huán)雙鏈表中,完成新結(jié)點(diǎn)S插入到結(jié)點(diǎn)P后面的操作,需要修改四個(gè)指針:?s->prior=p?;?s->next=p->next ??;?p->next->prior=s ??; ???p->next=s ???;
5. 在循環(huán)雙鏈表中,設(shè)指針p 指向待刪除結(jié)點(diǎn),刪除操作需要兩條語句:?p->prior->next=p->next ;??p->next->prior=p->prior ??。
6.設(shè)有一個(gè)雙鏈表,每個(gè)結(jié)點(diǎn)中除了有Prior、Data和Next三個(gè)分量外,還有訪問頻度分量Fred,根據(jù)題意寫出該結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)定義,結(jié)點(diǎn)名稱為DulNode。
?
三、判斷題
( 錯(cuò) )1、線性表的邏輯順序與存儲(chǔ)順序總是一致的。
( 錯(cuò))2、在單鏈表中要取得某個(gè)元素,只要知道該元素的指針即可,因此,單鏈表是隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)。
( 錯(cuò))3、線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)優(yōu)于順序存儲(chǔ)結(jié)構(gòu)。
( 錯(cuò))4、算法的原地工作的含義是指不需要任何額外的輔助空間。
四、算法設(shè)計(jì)題
1. 已知帶頭結(jié)點(diǎn)的單鏈表L,試寫一算法將單鏈表逆置。(12分)
//原地將鏈表逆置 typedef struct LNode {ElemType data;struct LNode *next ; }LNode, *LinkList; 2分void Inverse( LinkList L) 1分 {p = L->next; 2 分 L->next = NULL; 1 分 while (p != NULL) 2 分 {q = p->next; 1 分 p->next = L-next; 1 分 L->next = p; 1分 p = q; 1 分 } }//創(chuàng)建新鏈表逆置 LinkList* new,p; new=NULL; if(L==NULL) return 0; p=L->next; L->next=NULL; while(p) {p->next=new;new=p;p=p->next; } L->next=new;2.設(shè)有不帶頭結(jié)點(diǎn)單鏈表L,結(jié)點(diǎn)結(jié)構(gòu)為? ,以數(shù)據(jù)域的值非遞減有序排列,現(xiàn)插入一個(gè)數(shù)據(jù)為e的元素,使得插入后仍然有序,編寫此算法。(12分)
?
3.帶頭結(jié)點(diǎn)的單鏈表L,判斷非空單鏈表是否遞增有序。(12分)
Int increase(Node *first) 2分 {P=first->next; 2分 While(p->next!=NULL) 2分{q=p->next; 2分if (p->data<q->data) p=q; 2分Else return 0; 1分 }Return 1; 1分 }4.已經(jīng)帶頭結(jié)點(diǎn)的單鏈表,頭指針為first,復(fù)制該單鏈表。(12分)
Node *Copy(Node *first) 2分 {Head=(Node*)malloc(sizeof(Node));//headwz 新鏈表的頭指針 1分P=first->next;r=head; //工作指針p和尾指針r分別初始化 1分While(P!=NULL) 2分{ S=(Node*) malloc(sizeof(Node));s->data=p->data; //復(fù)制結(jié)點(diǎn) 2分r->next=s;r=s; //尾插法插入新鏈表1分p=p->next; 1分}r->next=NULL; 1分 return head; 1分 }5.?假設(shè)在長(zhǎng)度大于1的循環(huán)單鏈表中,既無頭結(jié)點(diǎn)也無頭指針,S為指向單鏈表中某個(gè)結(jié)點(diǎn)的指針,試編寫算法刪除結(jié)點(diǎn)S的前驅(qū)結(jié)點(diǎn);寫出該結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)定義。(12分)
void Del(Node *s) 2分 {p=s; 2分while(p->next->next != s) 2分p=p->next; 1分r=p->next; 1分p->next=s; 2分free(r); 2分 }總結(jié)
以上是生活随笔為你收集整理的河北科技大学——数据结构课后习题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Adobe Flash CS4 序列号-
- 下一篇: 第二十四期:揭秘:为什么电脑越用越卡 大