鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。
2. 雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點。其時間複雜度為o。
3. 單迴圈鍊錶。根據已知結點位置,可以直接得到其後相鄰的結點位置,又因為是迴圈鍊錶,所以我們可以通過查詢,得到p結點的直接前趨。因此可以刪去p所指結點。其時間複雜度應為o。
2.6 下述演算法的功能是什麼?
linklist demo
return l;
}// demo
答:2.7 設線性表的n個結點定義為,重寫順序表上實現的插入和刪除演算法:insertlist 和deletelist.
解:演算法如下:
#define listsize 100 // 假定表空間大小為100
typedef int datatype;//假定datatype的型別為int型
typedef struct seqlist;
//以上為定義表結構
void insertlist
void deletelist
2.8 試分別用順序表和單鏈表作為儲存結構,實現將線性表就地逆置的操作,所謂"就地"指輔助空間應為o。
答:1. 順序表:
要將該表逆置,可以將表中的開始結點與終端結點互換,第二個結點與倒數第二個結點互換,如此反覆,就可將整個表逆置了。演算法如下:
// 順序表結構定義同上題
void reverselist
2. 鍊錶:
分析:可以用交換資料的方式來達到逆置的目的。但是由於是單鏈表,資料的訪問不是隨機的,因此演算法效率太低。可以利用指標改指來達到表逆置的目的。具體情況入下:
當鍊表為空表或只有乙個結點時,該鍊錶的逆置鍊錶與原表相同。
當鍊表含2個以上結點時,可將該煉表處理成只含第一結點的帶頭結點鍊錶和乙個無頭結點的包含該鍊錶剩餘結點的鍊錶。然後,將該無頭結點鍊錶中的所有結點順著鍊錶指標,由前往後將每個結點依次從無頭結點鍊錶中摘下,作為第乙個結點插入到帶頭結點鍊錶中。這樣就可以得到逆置的鍊錶。演算法是這樣的:
結點結構定義如下:
typedef char datatype; //假設結點的資料域型別的字元
typedef struct nodelistnode;
typedef listnode linklist;
listnode
linklist head;
linklist reverselist
return head;
return head; //如是空表或單結點表,直接返回head
線性表演算法題庫 資料庫 線性表題庫
p sa s next p 1 p next s b p next s s next p next c s next p next p next s next d s next p next p next s 不帶頭結點的單鏈表 head 為空的判定條件是 a head null b head ne...
線性表演算法題庫 資料結構 線性表習題含答案
資料結構第二章 線性表習題含答案 說明 順序儲存的線性表稱為向量。一單項選擇題乙個向量第乙個元素的位址是 每個元素的長度為 則第個元素的地 址是 b a 110 b 108 c 100 d 120 線性結構通常採用的兩種儲存結構是 a a 順序儲存結構和鏈式儲存結構 b 雜湊方式和索引方式 c 鍊錶...
線性表演算法
1.在乙個遞增的順序表中插入乙個元素,並保持有序.分析 判斷順序表是否滿,滿了則追加空間.從表中的最後乙個元素開始,尋找插入位置,找到則插入,表長增一 int listinsert sq sqlist l,int ele for k l length 1 k 0 l slist k e k l sl...