關於鍊錶操作程式設計實現的一些總結

2021-07-04 03:59:43 字數 1875 閱讀 4006

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。

使用鍊錶結構可以克服陣列需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。鍊錶有很多種不同的型別,單項鍊表、雙向鍊錶和迴圈鍊錶。下面總結鍊錶操作的**實現。

1.單向鍊錶

typedef struct student

node;

// 建立鍊錶

node *createlist()

else

flag = 0;

}head = head->next;

rear->next = null;

return head;

}// 獲取鍊錶長度

int getlistlength(node *head)

return count;

}// 鍊錶內容輸出

void printlist(node *head)

coutnext != null)

if (num == p1->data)

else

coutreturn head;

node *t, *p1, *p2, *p;

p1 = (node *)malloc(sizeof(node));

p1->data = head->data;

p1->next = null;

p = p1;

t = head->next;

while (t != null)

return p2;

}

2.雙向鍊錶

typedef struct student

node;

// 建立鍊錶

node *createlist()

else

flag = 0;

}head = head->next;

head->prev = null;

rear->next = null;

return head;

}

3.迴圈鍊錶

typedef struct node_str

lnode, *linklist;

// 建立迴圈鍊錶(n為迴圈鍊錶中元素總數)

linklist createcircularlist(int n)

return head;

}// 輸出迴圈鍊錶k位置開始的m個元素(k從1開始計算)

void printcircularlist(linklist head, int k, int m)

for (int i=0; idata}

}}

迴圈鍊錶求解約瑟夫問題

// 約瑟夫環(約瑟夫問題):

// 已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,

// 數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複

// 下去,直到圓桌上僅剩1人。

// 約瑟夫問題

void josephus(int n, int m, int k)

// 開始報數,刪除節點

while (n > 1)

temp = head;

p->next = temp->next;

head = temp->next;

free(temp);

n--;

}// 輸出最後留下人的編號

cout

關於鍊錶的一些操作總結

這是乙個簡單的鍊錶操作問題,在leetcode上面有52.7 的通過率,難度是簡單。但是還是想在這裡基於python做一下總結,順便總結一下鍊錶的各種操作。首先先看一下leetcode上面的題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可...

關於鍊錶的一些總結

1.在鍊錶頭部新增空頭以消除頭部特殊判斷比較常見,用於刪除和新增元素,啞結點的意思就是在head第乙個節點之前設立乙個節點。2.因為鍊錶的操作有限,所以很多時候我們可以把鍊錶中的元素儲存在陣列中,進行操作。3.鍊錶從前往後遍歷元素簡單,但是從後往前遍歷元素確實困難重重,所以我們可以使用棧來儲存資料,...

鍊錶的一些操作

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