波波的資料結構 鍊錶

2021-10-12 08:35:20 字數 4312 閱讀 8706

波波的資料結構屬實上的快,這裡將會寫些pta的解析,算是複習 預習,幫助我與大家期末不掛科

2-1線性表若採用鏈式儲存結構時,要求記憶體中可用儲存單元的位址(d)。

a.必須是連續的

b.部分位址必須是連續的

c.一定是不連續的

d.連續或不連續都可以

解析:與順序表不同,可連續可不連續

2-2對線性表,在下列情況下應當採用鍊錶表示的是(b)。

a.經常需要隨機地訪問元素

b.經常需要進行插入和刪除操作

c.表中元素需要佔據一片連續的儲存空間

d.表中的元素個數不變

解析:鍊錶可以很方便的對元素進行操作,邏輯關係和儲存關係不用對應

2-3帶表頭附加結點的雙向迴圈鍊錶為空的判斷條件是頭指標l滿足條件(d)。

a.l= =null

b.l->right= =null

c.l->left = =null

d.l->right= =l

解析:l->right= =l 下一結點為自身時,雙鏈表為空時

2-4在單鏈表中,要刪除某一指定結點,必須先找到該結點的(a)。

a.直接前驅

b.自身位置

c.直接後繼

d.直接後繼的後繼

解析:找到的直接前驅用來連線直接後繼,然後再用free()函式來釋放指定結點的記憶體

2-5以下關於鏈式儲存結構的敘述中,(c)是不正確的。

a.結點除自身資訊外還包括指標域,因此儲存密度小於順序儲存結構

b.邏輯上相鄰的結點物理上不必鄰接

c.可以通過計算直接確定第i個結點的儲存位址

d.插入、刪除運算操作方便,不必移動結點

解析:順序表是連續儲存結構可以通過計算直接確定,鏈式儲存結構不行

2-6迴圈鍊錶的主要優點是(d)。

a.不再需要頭指標了

b.已知某個結點的位置後,能夠很容易找到它的直接前驅

c.在進行插入、刪除運算時,能更好的保證鍊錶不斷開

d.從表中的任意結點出發都能掃瞄到整個鍊錶

2-7將長度為n的單鏈表鏈結在長度為m的單鏈表之後的演算法的時間複雜度為(c)。

a.o(1)

b.o(n)

c.o(m)

d.o(m+n)

解析:遍歷一下長度為m的鍊錶,得到最後乙個節點的next指向長度為n的head就可以了

2-8在具有n個結點的單鏈表中,實現下列哪個操作,其演算法的時間複雜度是o(n)?(c)

a.在位址為p的結點之後插入乙個結點

b.刪除開始結點

c.遍歷鍊錶和求鍊錶的第i個結點

d.刪除位址為p的結點的後繼結點

解析:前面提到,鍊錶的優勢在於便於刪除和新增結點,acd的時間複雜度都為o(1)

2-9線性表l在什麼情況下適用於使用鏈式結構實現?(a)

a.需不斷對l進行刪除插入

b.需經常修改l中的結點值

c.l中含有大量的結點

d.l中結點結構複雜

解析:由上題解析得

2-10

鍊錶不具有的特點是:(b)

a.插入、刪除不需要移動元素

b.方便隨機訪問任一元素

c.不必事先估計儲存空間

d.所需空間與線性長度成正比

解析:鍊錶訪問特定位置的元素時間複雜度為o(n)

2-11

在雙向迴圈鍊錶結點p之後插入s的語句是:

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;

解析:先將s的前驅結點指向p,然後將s的後驅結點指向p的後驅結點,再將p後驅結點指向的結點的前驅結點指向s,最後將p的後驅結點指向s. 選項a和選b會導致連線過程中指標指向空。而選項c從第三步往後開始出現指標指向空。

2-12

如果對線性表的運算只有2種,即刪除第乙個元素,在最後乙個元素的後面插入新元素,則最好使用(b)。

a.只有表頭指標沒有表尾指標的迴圈單鏈表

b.只有表尾指標沒有表頭指標的迴圈單鏈表

c.非迴圈雙鏈表

d.迴圈雙鏈表

解析:迴圈單鏈表指的是最後節點的指標域指向表頭節點,如果要刪除第乙個元素,只需要通過表尾指標找到第二個節點,然後將最後節點的指標指向第二個節點,就將第乙個元素刪除了;在最後乙個元素後面插入新元素時,先找到表頭,然後將新元素的指標域指向表頭,然後再將表尾指向新元素就好了,演算法的複雜度為o(1)。 而a選項如果要刪除最後乙個元素,必須遍歷整個鍊錶才能找到表尾,進行新元素的插入、再插入時的演算法複雜度為o(n)。

2-13

在長度為n的(a)上,刪除第乙個元素,其演算法的時間複雜度為o(n)。

a.只有表頭指標的不帶表頭結點的迴圈單鏈表

b.只有表尾指標的不帶表頭結點的迴圈單鏈表

c.只有表尾指標的帶表頭結點的迴圈單鏈表

d.只有表頭指標的帶表頭結點的迴圈單鏈表

解析:單鏈表只能按單方向順序訪問節點,按題目意思,只有當a條件時,並當新元素的節點從表頭插入,使得第乙個元素的節點在表尾,才成立。這樣表頭指標順序訪問節點,訪問至鍊錶尾部時,複雜度剛好為o(n)。對於b而言,不帶頭節點迴圈鍊錶,表尾指標,如果是頭插法則第一元素就是表尾指標rear(假設表尾指標為rear)所指的節點,即當前節點,時間複雜度為o(1)。如果是正常順序插入節點(即非頭插法),由於是迴圈鍊錶,表尾指標rear指向最後乙個元素,rear->next即為第乙個元素(因為迴圈鍊錶,表尾的next是表頭,且沒有頭節點),時間複雜度仍然是o(1),所以b不成立。

對於c而言,和b情況相似,多了乙個表頭節點,如果是頭插法,則和b一樣表尾指標rear所指當前元素即為第乙個元素,時間複雜度為o(1)。如果是正常順序插入節點,則比b多乙個頭節點,就變成rear->next->next,但時間複雜度仍然是o(1),所以c不成立。

給出1->1->2->null,返回 1->2->null

給出1->1->2->3->3->null,返回 1->2->3->null

###單鏈表結點型別定義:

typedef int elemtype;    //元素的資料型別

typedef struct lnode linknode; //單鏈表結點型別

函式介面定義:

/*尾插法建立單鏈表,細節不表*/

linknode* createlistr(elemtype a, int n);

/*輸出線性表,細節不表*/

void displist(linknode *l);

/*刪除排序鍊錶中的重複元素*/

linknode* deleteduplicates(linknode *l);

其中 l是單鏈表的頭指標。 陣列a 存放建立無序單鏈表的元素,n為陣列長度,其值不超過10000。

裁判測試程式樣例:

#include#includetypedef int elemtype;    /*元素的資料型別*/

typedef struct lnode linknode; /*單鏈表結點型別*/

/*尾插法建立單鏈表,細節不表*/

linknode* createlistr(elemtype a, int n);

/*輸出線性表,細節不表*/

void displist(linknode *l);

/*刪除排序鍊錶中的重複元素*/

linknode* deleteduplicates(linknode *l);

int main()

linknode* l = createlistr(a, n);

l = deleteduplicates(l);

displist(l);

return 0;

}/* 請在下面填寫答案 */

答案

linknode* deleteduplicates(linknode *l)

l->next = deleteduplicates(l->next); //用遞迴遍歷l

return l->data == l->next->data ? l->next : l; //判斷條件

}

波波的資料結構 順序表

波波的資料結構屬實上的快,這裡將會寫些pta的解析,算是複習 預習,幫助我與大家期末不掛科 順序表2 1 對於順序儲存的長度為n的線性表,訪問結點和增加結點的時間複雜度為 b a.o 1 o 1 b.o 1 o n c.o n o 1 d.o n o n 解析 順序儲存可以實現 隨機訪問 因此訪問結...

波波的資料結構 排序(1)

波波的資料結構屬實上的快,這裡將會寫些pta的解析,算是複習 預習,幫助我與大家期末不掛科 2 1對一組包含10個元素的非遞減有序序列,採用直接插入排序排成非遞增序列,其可能的比較次數和移動次數分別是 a.100,100 b.100,54 c.54,63 d.45,44 解析 他問的是可能的比較次數...

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...