判斷題:
1.對於順序存儲的長度為N的線性表,訪問結點和增加結點的時間復雜度分別對應為O(1)和O(N)。T
2.若某線性表最常用的操作是存取任一指定序號的元素和在最后進行插入和刪除運算,則利用順序表存儲最節省時間。T
3.在具有N個結點的單鏈表中,訪問結點和增加結點的時間復雜度分別對應為O(1)和O(N)。F
4.對於順序存儲的長度為N的線性表,刪除第一個元素和插入最后一個元素的時間復雜度分別對應為O(1)和O(N)。F
5.若用鏈表來表示一個線性表,則表中元素的地址一定是連續的。F
6.在順序表中邏輯上相鄰的元素,其對應的物理位置也是相鄰的。T
7.順序存儲的線性表不支持隨機存取。F
8.在順序表上進行插入、刪除操作時需要移動元素的個數與待插入或待刪除元素的位置無關。F
9.在線性表的順序存儲結構中可實現快速的隨機存取,而在鏈式存儲結構中則只能進行順序存取。T
10.)單鏈表不是一種隨機存取的存儲結構。
單選題:
1.
在雙向循環鏈表中,在p所指的結點之后插入s指針所指的結點,其操作是()。
2.
線性表采用鏈式存儲時,其地址()。
3.
線性表的順序存儲結構是一種( )
4.
一個順序表所占用的存儲空間大小與( )無關。
5.
假設在順序表{A0,A1,...,An-1}中,每一個數據元素所占用的存儲單元的數目為4,且第0個數據元素A0的存儲地址為100,由第7個數據元素A7的存儲地址是( )。
6.
在鏈表中若經常要刪除表中最后一個結點或在最后一個結點之后插入一個新結點,則宜采用()存儲方式。
7.
要將一個順序表{a0,a1,……,an−1}中第i個數據元素ai(0≤i≤n-1)刪除,需要移動( )個數據元素。
8.
對於下圖2.29所示的單鏈表,下列表達式值為真的是( )。
9.
一個一維數組M,下標的范圍是0到9,每個數組元素用相鄰的5個字節存儲。存儲器按字節編址,設存儲數組元素M[0]的第一個字節的地址是100,則M[4]的第一個字節的地址是。 (2分)
10.
鏈式存儲結構的最大優點是( )。
11.
在單鏈表中,增加一個頭結點的最終目的是為了( )。
12.
已知指針ha和hb分別是兩個單鏈表的頭指針,下列算法將這兩個鏈表首尾相連在一起,並形成一個循環鏈表(即ha的最后一個結點鏈接hb的第一個結點,hb的最后一個結點指向ha),返回該循環鏈表的頭指針。請將該算法補充完整。
typedef struct node{
ElemType data;
struct node *next;
}LNode;
LNode *merge(LNode *ha, LNode *hb) {
LNode *p=ha;
if (ha==NULL || hb==NULL) {
cout<<”one or two link lists are empty!”<<endl;
return NULL;
}
while ( p->next!=NULL )
p=p->next;
p->next=hb;
while ( p->next!=NULL )
p=p->next;
__________
}
13.
已知單鏈表中的元素以值遞增有序排列,下列算法刪除單鏈表中所有值相同的元素,同時釋放被刪結點空間。請將該算法補充完整。
typedef struct node{
ElemType data;
struct node *next;
}LNode;
void delete_equal(LNode *h){
LNode *p=h, *q;
if (h==NULL) return;
while (p->next!=NULL) {
q=p->next;
if (p->data!=q->data)
p=q;
else //相鄰兩元素值相等,則循環刪除后繼等值結點
while (q!=NULL && q->data==p->data) {
__________________________
}
}
}
14.
帶表頭附加結點的單鏈表head為空的判斷條件是()。
15.
非空的循環單鏈表head的尾結點(由p所指向)滿足()。
16.
在循環雙鏈表的p所指結點之前插入s所指結點的操作是()。
17.
若某表最常用的操作是在最后一個結點之后插入一個結點或刪除最后一個結點,則采用()存儲方式最節省運算時間。
18.
某線性表最常用的操作是在最后一個結點之后插入一個結點或刪除第一個結點,故采用()存儲方式最節省運算時間。
19.
在一個長度為n(n>1)的單鏈表上,設有頭和尾兩個指針,執行()操作與鏈表的長度有關。
20.
如果對線性表的運算只有4種,即刪除第一個元素,刪除最后一個元素,在第一個元素前面插入新元素,在最后一個元素的后面插入新元素,則最好使用()。