資料結構>>過程性考核
一、選擇題(15個題,每題2分,共計30分)
1、資料結構DS可以被定義成DS=(D,R),其中D表示( B )的集合,R表示( C )的集合。
A 資料物件 B資料元素 C 關係 D 映像
2、計算機的演算法指的是( B ),它必須具備輸入、輸出和( CD )等五大特性。
A 計算方法 B 解決問題的有限序列
C 可行性、確定性和有窮性 D 可行性、確定性和有窮性
3、順序表中第一個元素的儲存地址是100,每個元素的長度為4,則第5個元素的地址是( C )。
A.110 B.108 C.116 D.120
4、抽象資料型別的三個組成部分分別是( A)
A 資料物件、資料關係和基本操作 B 資料元素、邏輯結構和儲存結構
C 資料項、資料元素和資料型別 D 資料元素、資料結構和資料型別
5、演算法分析的兩個主要方面( A )
A 空間複雜度和時間複雜度 B正確性和簡單性
C 可讀性和文件性 D 資料複雜性和程式複雜性
6、順序儲存結構中的資料元素之間的邏輯關係由( C )來表示的。
A 線性結構 B非線性結構 C 儲存位置 D指標
7、下面程式的時間複雜為( )
for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;}
(A) O(n) (B) O(n2) (C) O(n3) (D) O(n4)
8、設指標變數p指向單鏈表中結點A,若刪除單鏈表中結點A,則需要修改指標的操作序列為( )。
(A) q=p->next;p->data=q->data;p->next=q->next;free(q);
(B) q=p->next;q->data=p->data;p->next=q->next;free(q);
(C) q=p->next;p->next=q->next;free(q);
(D) q=p->next;p->data=q->data;free(q);
9、有連結串列L,在結點p和結點q之間插入一個結點s的語句是( )
A s->next=q; p=s; B p->next=s ; s=q; C s->next=q; p->next=s; D s=q; p->next=s;
10、帶有頭結點的連結串列L,則判斷連結串列為空的條件是( 沒答案,L->next==NULL )
A L==NULL B L->next=NULL C l->next==NULL D L->next==null
11、用首插法和尾插法建立的連結串列,同樣的輸入順序,在遍歷連結串列的時候,關於連結串列元素的輸出順序說法錯誤的是( )
A兩者輸出的順序一致 B 兩者輸出的順序互為逆序關係 C 首插法輸出的順序與輸入的順序相反 D尾插法輸出的順序和輸入的順序相同
12、在一個長度為n的順序表中,在第i個元素(1in+1)之前插入一個新元素時須向後移動( )個元素。
A n-i B n-i+1 C n-i-1 D i
13、在單鏈表的第i個結點後插入一個新結點(1in)的演算法時間複雜度是( )
A O(1) B O(n) C O(n2) D O(log2n)
14、對於單鏈表表示法,以下說法錯誤的是( )
A資料域用於儲存線性表的一個數據元素
B指標域或鏈域用於存放一個指向本結點的直接後繼結點的指標
C所有資料通過指標的連線而組織成單鏈表
D NULL稱為空指標,它不指向任何結點,只起標誌作用
15、線上性表的下列運算中,不改變資料元素之間結構關係的運算是( )
A 插入 B 刪除 C 排序 D 定位
二、時間複雜度計算(2個題,每題5分,共計10分)
提示:最大語句頻度就是執行次數最多的語句的執行次數
1:答案: n3 和 O(n3)
2:答案: log2n 和 O(log2n )
三、演算法填空(2個題,每題15分,共計30分)
1、如下演算法完成帶頭結點的單鏈表的初始化。(15分)
void initList(LinkList &L) { //初始化單鏈表
L= (LinkList)malloc(sizeof(Lnode));
if(!L)
exit(0);
L->next=NULL;
}
2、如下演算法完成刪除順序表L中所有元素x。(15分)
void deleteValue(SeqList &L, elemType x)
{
int i,k=0;
for(i = 0; i < L.Length; i++) // 檢測表中所有元素
if( L.elem[i]!=x ) { // 若元素不具有 x 值
if(i!=k) //該元素前移
L.elem[k]=L.elem[i];
k++;
}
L.Length=k;
}
三、演算法設計(2個題,每題15分,共計30分)
1、刪除順序表中的最大值。(15分)
intdeleteMax(SqList&L,ElemType&x)
{
//刪除順序表L中具有最大值的元素。如果刪除成功,則函式返回1並通過引用
//型引數x返回其值,否則函式返回0。
if(L.length==0){
printf("這是空表!\n");
return0;
}
inti,max_i=0;//假定0號元素的值最大
for(i=2;i<=L.length;i++)//迴圈,尋找具有最大值的元素
if(L.elem[i-1]>L.elem[max_i])
max_i=i-1;//max_i記憶當前具最大值元素的位置
x=L.elem[max_i];
L.length--;
L.elem[max_i]=L.elem[L.length];
return1;
}
2、統計連結串列中元素e的個數。(15分)
int count(LinkList L,elemType e)
{
LinkList p=L->next;
int n=0;
while(p)
{
if(p->data==e)
n++;
p=p->next;
}
return n;
}
#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=
本文來自部落格園,作者:凡是過去,皆為序曲,轉載請註明原文連結:https://www.cnblogs.com/longhai3/p/15887671.html
如有疑問,歡迎提問
#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=