作業6-改進的單鏈表及其應用
2-1對於一非空的迴圈單鏈表,
h和p分別指向鍊錶的頭、尾結點,則有:(a)
a.p->next == h
b.p->next == null
c.p == null
d.p == h
2-2在雙向迴圈鍊錶結點p之後插入s的語句是:(d)
a.p->next=s; s->prior=p; p->next->prior=s ; s->next=p->next;
b.p->next->prior=s; p->next=s; s->prior=p; s->next=p->next;
c.s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;
d.s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
2-4某線性表中最常用的操作是在最後乙個元素之後
插入乙個元素和刪除第乙個元素,
則採用什麼儲存方式最節省運算時間?(b)
a.單鏈表
b.僅有尾指標的單迴圈鍊錶
c.僅有頭指標的單迴圈鍊錶
d.雙鏈表
[解析]對c,若要在最後插入乙個元素,那麼只有頭指標你還得遍歷到最後
對d,雙鏈表但不是迴圈的,那麼在最後位置插入和頭指標的情況一樣
2-5若某錶最常用的操作是在最後乙個結點之後
插入乙個結點或刪除最後乙個結點。
則採用哪種儲存方式最節省運算時間?()
a.單鏈表
b.雙鏈表
c.單迴圈鍊錶
d.帶頭結點的雙迴圈鍊錶
[解析]abc在最後插入節點都需要遍歷一遍鍊錶
2-6將線性表la和lb頭尾連線,要求時間複雜度為o(1),
且占用輔助空間盡量小。應該使用哪種結構?(d)
a.單鏈表
b.單迴圈鍊錶
c.帶尾指標的單迴圈鍊錶
d.帶頭結點的雙迴圈鍊錶
[解析]ab需要遍歷鍊錶,c只需要修改兩個尾指標的內容
並且釋放掉第二個鍊錶的頭指標即可
d時間是o(1),但是空間利用率不如c
2-9在迴圈雙鏈表的p所指結點之前插入s所指結點的操作是()。(d)
a.p->prior = s; s->next = p; p->prior->next = s; s->prior = p->prior;
b.p->prior = s; p->prior->next = s; s->next = p; s->prior = p->prior;
c.s->next = p; s->prior = p->prior; p->prior = s; p->right->next = s;
d.s->next = p; s->prior = p->prior; p->prior->next = s; p->prior = s;
2-10
若某錶最常用的操作是在最後乙個結點之後插入乙個結點或刪除最後乙個結點,
則採用()儲存方式最節省運算時間。(d)
a.單鏈表
b.給出表頭指標的單迴圈鍊錶
c.雙鏈表
d.帶表頭附加結點的雙迴圈鍊錶
2-11
某線性表最常用的操作是在最後乙個結點之後
插入乙個結點或刪除第乙個結點,故採用()儲存方式最節省運算時間。(d)
a.單鏈表
b.僅有頭結點的單迴圈鍊錶
c.雙鏈表
d.僅有尾指標的單迴圈鍊錶
2-12
在乙個長度為n(n>1)的單鏈表上,設有頭和尾兩個指標,
執行()操作與鍊錶的長度有關。(b)
a.刪除單鏈表中的第乙個元素
b.刪除單鏈表中的最後乙個元素
c.在單鏈表第乙個元素前插入乙個新元素
d.在單鏈表最後乙個元素後插入乙個新元素
[解析]刪除最後乙個元素需要知道前乙個元素的位址
2-14
如果對線性表的運算只有2種,即刪除第乙個元素,
在最後乙個元素的後面插入新元素,則最好使用()。(b)
a.只有表頭指標沒有表尾指標的迴圈單鏈表
b.只有表尾指標沒有表頭指標的迴圈單鏈表
c.非迴圈雙鏈表
d.迴圈雙鏈表
2-15
在雙向迴圈鍊錶中,在p所指的結點之後插入s指標所指的結點,其操作是()。(d)
a.p->next = s; s->prior = p; (p->next)->prior = s; s->next = p->next;
b.s->prior = p; s->next = p->next; p->next = s; p->next->prior = s;
c.p->next = s; p->next->prior = s; s->prior = p; s->next = p->next;
d.s->prior = p; s->next = p->next; p->next->prior = s; p->next = s;
2-16
帶表頭附加結點的雙向迴圈鍊錶為空的判斷條件是頭指標l滿足條件()。(d)
a.l= =null
b.l->right= =null
c.l->left = =null
d.l->right= =l
2-17
迴圈鍊錶的主要優點是()。(d)
a.不再需要頭指標了
b.已知某個結點的位置後,能夠很容易找到它的直接前驅
c.在進行插入、刪除運算時,能更好的保證鍊錶不斷開
d.從表中的任意結點出發都能掃瞄到整個鍊錶
[解析]優點在遍歷的時候體現
2-18
已知指標ha和hb分別是兩個單鏈表的頭指標,
下列演算法將這兩個鍊錶首尾相連在一起,並形成乙個迴圈鍊錶
(即ha的最後乙個結點鏈結hb的第乙個結點,
hb的最後乙個結點指向ha),
返回該迴圈鍊錶的頭指標。請將該演算法補充完整。(b)
typedef struct nodelnode;
lnode *merge(lnode *ha, lnode *hb)
a.ha=p->next; return ha;
b.p->next=ha; return ha;
c.ha=p->next; return p;
d.p->next=ha; return p;
[解析]這倆鍊錶應該是沒有頭結點
2-19
typedef struct node dnode;
dnode *locate_dlist(dnode *&l, elemtype x)
else if (q!=p->left )
return p;
}a.p->left=q; p->right=q->right;
b.p->left=q; q->right=p;
c.p->left=q; p->right=q->right; q->right->left=p; q->right=p;
d.p->left=q; q->right=p; p->right=q->right; q->right->left=p;
2-20
與單鏈表相比,雙鏈表的優點之一是()。(d)
a.插入、刪除操作更加簡單
b.可隨機訪問
c.可以省略表頭指標或表尾指標
d.順序訪問相鄰結點更加靈活
[解析]不太理解順序是啥意思,但是訪問乙個節點的相鄰節點確實更方便了
2-21
採用多項式的非零項鍊式儲存表示法,如果兩個多項式的非零項分別為n1和n2個,
最高項指數分別為m1和m2,則實現兩個多項式相乘的時間複雜度是:(a)
a.o(n1×n2)
b.o(m1×m2)
c.o(n1+n2)
d.o(m1+m2)
6
-1 帶頭結點的單鏈表就地逆置 (
9分)/* 請在這裡填寫答案 */
//這是把元素提出來,乙個乙個重新逆序插入鍊錶l中
//不過要注意插入之前l->next要賦null,否則鍊錶尾結點的next不為空
//輸出會死迴圈好像
void
listreverse_l
(linklist &l)
return;}
前乙個題越寫越亂,就放棄了7-
24 求鏈式線性表的倒數第k項 (
20分)
#include
#include
using
namespace std;
#define overflow -2
typedef
int elemtype;
typedef
struct dulnode
dulnode,
*dulist;
void
initlist_dul
(dulist &l)
void
addnode
(dulist &l)
}int
get_elem_in_k
(dulist l,
int k)
return p-
>data;
}int
main()
資料結構作業6 鍊錶的改進及其應用(程式設計題)
設計函式求一元多項式的導數。以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。3 4 5 2 6 1 2 0 12 3 10 1 6 0 include intmai...
單鏈表的應用
就地逆置 頭插法 有乙個線性表採用帶頭節點的單鏈表儲存,採用就地演算法將其就地逆置。思路 使用p指標掃瞄原單鏈表,現將頭節點的next置為空,然後將其他節點採用頭插法插入。就地逆置單鏈表,就地 的意思是輔助空間為o 1 public void reverse linklist l 將乙個線性表拆成兩...
單鏈表的應用
前言 上一節通過學習單鏈表,知道單鏈表的是隨機訪問結構,要獲取元素的元素必須從頭指標出發順序查詢,因此也稱為順序訪問的訪問結構,使用單鏈表可以克服陣列鍊錶需要預先知道資料大小的缺點,實現靈活的動態記憶體管理。這裡我們用c語言結合單鏈表來實現乙個可以實現增刪改查的學生管理系統。include incl...