鍊錶 1 設計鍊錶的一些細節

2021-05-21 21:02:33 字數 833 閱讀 7263

先說一些設計鍊錶的一些規則和細節:

typedef unsigned cnttype;

typedef char   datatype;

1)對於鍊錶應當使用乙個頭節點:既不使用資料域的節點如:

typedef  struct nodenode;

也許有人會說這樣會浪費資料空間,但是這樣會簡化演算法相應的也就節省了

**段的空間了。。

例如對於乙個沒有頭節點的鍊錶:

(以下兩例均是採用尾插法)

/*建立乙個鍊錶:採用尾插法*/

而對於使用頭結點的鍊錶接可以節省演算法設計**:

再比如在乙個鍊錶中找到乙個data值為x的節點並刪除之

有頭結點的:

而沒有頭結點的則這樣設計演算法:

2)對於雙鏈表:

typedef  struct nodenode;

node *head;             /*指向首節點*/

node *tail;  /*指向尾節點*/

應當有head->prev == tail-> next == null;

而不是head->prev == head;

tail->next == tail;

因此:初始化時先建立乙個首節點 node *head

head = (node *)calloc(1, sizeof(node));

首節點初始化:

head->prev = head->next = null;

而不是:

head->prev = head->next = head;         /*linux核心是這樣做的,讀者可以按情況考慮*/

鍊錶的一些操作

判斷兩個鍊錶是否有交點 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 假設兩個鍊錶都不存在環 相交的煉表示意圖如下所示。兩個沒有環的鍊錶如果是相交於某一結點,如上圖所示,這個結點後面都是共有的。所以如果兩個鍊錶相交,那麼兩個鍊錶的尾結點的位址也是一樣的。程式實現時分別遍歷兩個單鏈表,直到尾結...

鍊錶和順序表的一些區別

順序表與鍊錶是非常基本的資料結構,它們可以被統稱為線性表。線性表 linear list 是由 n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。順序表和煉表,是線性表的不同儲存結構。它們各自有不同的特點和適用範圍。針對它們各自的缺點,也有很多改進的措施。順序表一般表...

鍊錶的一些基本操作

include include typedef struct list elem,pelem typedef struct real list,plist void initialize plist mylist 初始化 int creat plist mylist1 建立鍊錶 else print...