1:概念:
單向鍊錶是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過順序讀取從頭部開始。鍊錶是使用指 針進行構造的列表,並且是由乙個個結點組裝起來的,因此又稱為結點列表。其中每個結點都有指標成員變數指向列表中的下乙個結點,head指標指向第乙個結點稱為表頭,而終止於最後乙個指向null的指標。
2:圖示
3:**示例
#define _crt_secure_no_warnings
#include#include#include/*帶有頭節點的單向鍊錶*/
typedef struct node
node;
/*建立頭節點*/
node * createlist()
head->id = -1;
head->next = null;
node * pcur = head;
node * pnew = null;
int data;
while (1)
//新節點動態分配記憶體空間
pnew = (node *)malloc(sizeof(node));
if (pnew==null)
//新節點成員變數賦值
pnew->id = data;
//pnew->next = null;
//鍊錶建立關係
pcur->next = pnew; //當前節點的next指向pnew
pnew->next = null; //pnew的下乙個節點指向null
pcur = pnew; //把pcur的位置移動到pnew
} return head;
}//在值為x的結點前,插入值為y的結點;若值為x的結點不存在,則插在表尾。
int insertlist(node *head,int x,int y)
node *ppre = head;
node *pcur = head->next;
while (pcur != null)
ppre = pcur; //ppre指向pcur位置
pcur = pcur->next; //pcur指向下乙個結點
} /*2種情況
*1. 找匹配的結點,pcur為匹配結點,ppre為pcur上乙個結點
*2. 沒有找到匹配結點,pcur為空結點,ppre為最後乙個結點
*/ node *pnew = (node *)malloc(sizeof(node));
if (pnew == null)
pnew->id = y;
pnew->next = null;
ppre->next = pnew; //ppre下乙個指向pnew
pnew->next = pcur; //pnew下乙個指向pcur
return 0;
}/*刪除給定值的節點*/
int deletelist(node *head, int x)
node *ppre = head;
node *pcur = head->next;
while (pcur != null)
ppre = pcur;
pcur = pcur->next;
} return 0;
}/*清空鍊錶*/
int destroylist(node *head)
node *tmp = null;
int i = 0;
while (head != null)
printf("i=%d\n", i);
return 0;
}/*鍊錶遍歷*/
int printlist(node *head)
node *pcur = head->next;
printf("head->");
while (pcur != null)
printf("null\n");
return 0;
}int main()
Josephu問題 單向環形列表
josephu問題 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。根據問題的描述,我們可以使用乙個沒有頭節點的單向環形鍊錶來實現解決這個jo...
資料整理 C C
1.vs 找bug找了一晚上,終於給找到了,竟然是vs2010更新了乙個設定項弄的。vs2008只需要在專案 專案依賴項裡設定好依賴關係,生成時就會自動鏈結依賴項的輸出檔案。比如解決方案裡有兩個專案,乙個exe專案,乙個lib專案,如果設定exe專案依賴lib專案,則在生成exe專案時就會自動鏈結l...
HashMap學習 單向列表轉化為雙向列表
一 概覽 hashmap的某個桶位如果儲存的是單向列表,當向這個桶位繼續插入乙個元素的時候,這個桶位元素的數量超過 8時,單項列表會轉化為紅黑樹 同時是乙個雙向列表,jdk1.8之後 且會先轉化為雙向列表 二 轉化過程 1,執行如下程式,使map底層陣列的某個桶位的單向列表 開始 轉化為紅黑樹 按道...