單鏈表的操作實現

2021-05-09 15:16:30 字數 2175 閱讀 2528

#include /* malloc */

#include typedef struct _node node;

/* 此程式中的單鏈表帶頭結點.

* 基本操作:

* 建立

* 插入

* 刪除

* 長度

* 列印

* 排序

* 逆置

* 求中

* 合併

* 去重

*/node *create(int num);

void print(node *l);

int getlength(node *l);

node *delete(node *l, int val);

node *insert(node *l, int val);

node *sort(node *l);

node *reverse(node *l);

int getmid(node *l);

node *merge(node *l1, node *l2);

node *delrepeat(node *l);

int main()

/* create */

node *create(int num)

p->next = null;

return head;

}/* print */

void print(node *l)

printf("/n");

} else

printf("this is a empty list./n");

return;

}int getlength(node *l) // not include head node.

return len;}

node *sort(node *l)

if (len<2) // 少於2個節點直接不處理.

return (head);

p = l->next;

for (i=1; inext; // 歸位, 非常重要!!!

for (j=1; jdata > p->next->data)

p = p->next;

} if (flag == 0)

break;

} return (head);

}/* 前提是單鏈表是有序的, 單調不減. 使用sort() */

node *delete(node *l, int val)

if (p != null)

else

printf("not find node of value: %d/n", val);

return (head);

}/* 前提是單鏈表是有序的, 單調不減. 使用sort() */

node *insert(node *l, int val)

if (p != null)

else

return (head);

}node *reverse(node *l)

p->next = b; // important, 否則只得到乙個節點,其他的都會丟掉.

head->next = p;

return (head);

}int getmid(node *l) // 按照中間點 = n/2原則

return (mid->data);

}node *merge(node *l1, node *l2) // 如果允許重複, 不需要free任何節點.

else if (p1->data > p2->data)

else

} // end of while.

if (p1 != null)

p->next = p1;

if (p2 != null)

p->next = p2;

free(l2); // 將l2頭節點釋放!

l2 = null;

return (head);

}node *delrepeat(node *l) // 在有序的基礎之上進行.

p = p->next;

} // p->next = null; // 情形: 1. 最後結點保留; 2. 最後結點刪除, 則此時已有p=null.

return (head);

}

單鏈表的操作實現

本節討論線性表的鏈式儲存結構和鏈式儲存結構下操作的實現。鏈式儲存結構線性表資料元素的方法是,把儲存有資料元素的結點用指標域構造成鏈。指標是指向物理儲存單元位址的變數,我們把乙個由資料元素域及乙個或若干個指標域組成的結構體稱為乙個結點。其中,資料域元素間的邏輯關係表現在結點的鏈結關係上。鏈式儲存結構的...

c 實現單鏈表的操作

include using namespace std define null 0 class node 節點類 建構函式 node int n 建構函式 node int n,node p void setnum int n 資料和指標兩個屬性分開操作 void setnext node p in...

單鏈表基本操作的實現

package pac1 class node public void show public class linklist 插入乙個頭結點 public void addheadnode int data 頭插法建立表,將新節點插入到頭結點之後 public void creatlist1 lin...