算法與數據結構模擬試題及答案
多做模擬試題對于我們學好算法與數據結構課程很有幫助。以下是陽光網小編要與大家分享的算法與數據結構模擬試題,供大家參考!
算法與數據結構模擬試題一、單選題
1. 需要分配較大空間,插入和刪除不需要移動元素的線性表,其存儲結構是( )。
A. 單鏈表 B. 靜態鏈表
C. 線性鏈表 D. 順序存儲結構
2. 用單鏈表表示的鏈隊的對頭在鏈表的( )位置。
A. 鏈頭 B. 鏈尾
C. 鏈中 D. 任意
3. ( )是C語言中的“abcd321ABCD”的子串( )。
A. abcd B. 321AB
C. “abcABC” D. “21AB”
4. 一個n*n的對稱矩陣,如果以行或者列為主序放入內存,則容量為(
A. n*n B. n*n/2
C. n*(n+1)/2 D. (n+1)2/2
5. 遞歸函數f(n)=f(n-1)+n (n>1)遞歸出口是( )。
A. f(1)=0 B. f(1)=1
C. f(0)=1 D. f(n)=n
6. 有如下遞歸過程:
Void reverse (int m)
﹛
Printf (“%d”,n%10);
If (n/10!=0)
Reverse (n/10);
﹜
調用語句reverse(582)的結果是( )。
A. 582 B. 852
C. 258 D. 285
7. 樹最適合用來表示( )。
A. 有序數據元素 B. 無序數據元素
C. 元素之間具有分支層次關系的數據 D. 元素之間無聯系的數據
8. 順序查找法適合于存儲結構為( )的線性表。
A. 散列存儲 B. 順序存儲或鏈式存儲
C. 壓縮存儲 D. 索引存儲
算法與數據結構模擬試題二、多選題
1. 數據是信息的載體,它有( )幾種形式。
A. 整數和實型數 B. 字符串
C. 圖像和聲音 D. 信息
E. 磁盤文件
2. 在算法分析與數據結構中,算法描述方法有( )。
A. 自然語言 B. 框圖
C. 類計算機語言 D. 數據結構
3. 常用的線性表存貯結構有( )。
A. 順序存貯結構 B. 鏈表存貯結構 C. 隊列存貯結構 D. 堆棧存貯結構 E. 順序存貯與鏈表存貯混合結構 4. 一維數組元素的類型可以是( )。
A. 簡單變量,如整數、浮點數 B. 復合變量,如結構體、數組 C. 只有簡單變量 D. 指針變量 E. 字符串
5. 假設以鏈表的方式實現堆棧,top為棧頂指針,指向類型為linkstack類型,下述程序 實現將堆棧初始化為空棧的操作。程序( )是正確的。
A. void INITSTACK( linkstack *top ) { top = NULL;};
B. void INITSTACK(linkstack * top ) { top = -1;};
C. void INITSTACK(linkstack * top ) { top = 0;};
D. void INITSTACK(linkstack * top ) { top =空;};
6. 下列排序算法中哪些是不穩定的?( )
A. 冒泡排序 B. 選擇排序 C. 快速排序 D. 堆排序
算法與數據結構模擬試題三、填空題
1. 數據結構針對數據對象,要研究其___________,邏輯結構及其操作。
2. 算法設計要求達到以下目標:___________、可讀性、健壯性、高效率與低存儲要求。 3. 棧的特點是___________,因此棧又稱為___________表。 4. 隊列的特點是___________,因此隊列又稱為___________表。
5. 假定二叉樹的數據域為data, 左右子樹的指針域分別是lChild和rChild,指向根結點 的指針為t, 完善以下二叉樹前序遍歷的算法。 Preorder(t) { ___________; ___________; if (t==NULL) return;
Printf(t->data); }
6. 冒泡排序算法在最好情況下,比較次數是___________。 7. 針對插入與刪除操作,順序文件效率不高。如果需要在順序文件上實現插入與刪除操作, 解決問題的基本方法是___________。
8. 下面的算法是從數組a中刪除第i個元素起的k個元素。試補充完整程序。 /* ArraySize 指數據的尺寸,last是數據中已有的元素個數.*/ Algorithm delK(int a[ArraySize], int i, int k, int last)
If (!(( K >= 0) && (1 <= i +k && i +k <= last )&& ( 0 <= last && last <= arrary)) { /* 判斷參數合法性 */ Printf(“Error !”); Else
For (count = 1; count <= k; count++) { /* 刪除一個元素 */
For(j = last; j>= i +1; j--) ___________; Last = last – 1; }}
算法與數據結構模擬試題四、判斷題
1. 線性表中的元素只能是簡單類型。( ) 2. 線性表是數組。( )
3. 如果入隊與出隊的操作順序不同,其輸出元素的順序可以與輸入元素的順序不同。( ) 4. 棧滿是數據對象棧的固有操作。( )
5. 二叉樹只有前序、中序和后序三種遍歷運算。( )
6. 數據結構中只研究了二叉樹,對一般樹沒有給出解決問題的算法。( )
7. 在單向鏈表中,在X指向的結點后插入結點,對應的方法與X是否是頭指針無關。( ) 8. 分塊查找時引入了靜態查找就是順序查找、折半查找和分塊查找。( )
9. 在求最短路徑的Dijkstra算法和Floyd算法中,Dijkstra算法只能求從一點到其他各 點的最短路徑,而Floyd算法可以求圖中兩點之間的最短路徑。( ) 10. 樹是一種特殊的圖。( )
算法與數據結構模擬試題五、簡答題
1. 對鏈表設置頭結點的作用是什么?(至少說出兩條好處) 2. 在hq的`鏈隊中,設計一個算法求該連隊中結點的個數。 3. 假設有如下的結構定義: struct node {
char data;
struct node * link; }
* p, *pre;
而且pre指向鏈表中非空元素,寫一段程序生成構造p結點,并將其鏈入到pre之后。 4. 求1到n的平方和(利用遞歸函數調用) 5. 為什么要采用循環隊列?
算法與數據結構模擬試題參考答案
一、單項選擇題
badc bdcb
二、多項選擇題
1.abc
2.abc
3.abe
4.abd
5.ac
6.bcd
三、填空題
(1)物理結構 (2)正確性 (3)先進后出,先進后出 (4)先進先出,先進先出 (5)Preorder(t->lChild);
Preorder(t->rChild); (6) n-1 (7)批處理 (8)A[j-1] = a[j]
四、判斷題
FFFFFFFFFT
五、簡答題
1 答:其好處有:
(1)對帶頭結點的鏈表,在表的任何接點之前插入結點或刪除表中的任何結點,所要做的都是修改前一個結點的指針域,因為任何元素結點都有前驅結點(若鏈表沒有頭結點,則首元素結點沒有前驅結點,在其前插入結點和刪除結點時操作復雜些)。
(2)對帶頭結點的鏈表,表頭指針是指向頭結點的非空指針,因此空表與非空表的處理是一樣的。
2 答:求該鏈隊中結點個數實際上是計算以hq->front為頭指針的單鏈表中的結點個數。算法如下:
Int Qucount (Lqueue *hq) {
SNode *p=hq->front; Int n=0;
While (p!=NULL) {
n++;
P=P->next; }
Return (n); }
3 ch=getchar(); //取一個數據元素// p=(struct node *)malloc(sizeof(struct node));
//申請一個新結點// p->data=ch;
p->link = pre->link; pre->link = p; 4 答:
Int sum2(int n) {
If (n==0)return 0; Return sum2(n-1)+n*n; }
【算法與數據結構模擬試題及答案】相關文章: