單向鍊錶的基本操作

2021-08-16 03:03:08 字數 4957 閱讀 5890

#pragma once

#include #include #include #include typedef char linktype;

typedef struct linknode linknode;

void linklistinit(linknode** head);//初始化鍊錶

linknode* linklistpushback(linknode** head, linktype value);//尾插乙個元素到鍊錶中

void linklistpopback(linknode** head);//尾刪乙個元素

void linklistpushfront(linknode** head, linktype value);//頭插乙個元素

void linklistpopfront(linknode** head);//頭刪乙個元素

/*** @brief 查詢元素在鍊錶中的位置

** @param head

* @param to_find 要查詢的值

** @return 這個值對應的節點的位址

*/linknode* linklistfind(linknode* head, linktype to_find);

void linklistinsert(linknode** head, linknode* pos, linktype value);//在pos之前插入元素

void linklistinsertafter(linknode** head, linknode* pos, linktype value);//在pos之後插入元素

void linklisterase(linknode** head, linknode* pos);//刪除指定位置的元素

void linklisterase2(linknode** head, linknode* pos);//刪除指定位置的元素 o(1)

void linklistremove(linknode** head, linktype to_delete);//刪除指定值的元素

void linklistremoveall(linknode** head, linktype value);//指定值的所有元素都刪掉.

/*** @brief 判定鍊錶為空

** @return 鍊錶為空, 返回1, 否則返回0

*/int linklistempty(linknode* head);

size_t linklistsize(linknode* head);//求鍊錶的元素個數

#include "linklist.h"

//初始化鍊錶

void linklistinit(linknode** head)

if (*head == null)

*head = null;

return;

}linknode *linklistcreatenode(linktype value)

void linklistdestorynode(linknode *to_delete)

//尾插乙個元素到鍊錶中

linknode* linklistpushback(linknode** head, linktype value)

if (*head == null)

linknode *cur = *head;

while (cur->next != null)

cur->next = linklistcreatenode(value);

return cur->next;

}//尾刪乙個元素

void linklistpopback(linknode** head)

if ((*head)->next == null)

linknode *cur = *head;

while (cur->next != null)

cur = cur->next;

} return;

}//頭插乙個元素

void linklistpushfront(linknode** head, linktype value)

if (*head == null)

linknode *cur = *head;

cur = linklistcreatenode(value);

cur->next = *head;

*head = cur;

return;

}//頭刪乙個元素

void linklistpopfront(linknode** head)

if ((*head)->next == null)

linknode *cur = *head;

*head = cur->next;

linklistdestorynode(cur);

}linknode* linklistfind(linknode* head, linktype to_find)

linknode *cur = head;

if (cur->data == to_find)

while (cur->next != null)

cur = cur->next;

} return null;

}//在pos之前插入元素

void linklistinsert(linknode** head, linknode* pos, linktype value)

if (pos == null)

if ((*head)->next == null)

return;

} linknode* cur = *head;

while (cur->next != null)

cur = cur->next; }}

//在pos之後插入元素

void linklistinsertafter(linknode** head, linknode* pos, linktype value)

linknode* cur = *head;

while (cur != null)

cur = cur->next;

} return;

}//刪除指定位置的元素

void linklisterase(linknode** head, linknode* pos)

linknode *cur = *head;

if (pos == *head)

while (cur->next != null)

cur = cur->next;

} return;

}//刪除指定位置的元素 o(1)

void linklisterase2(linknode** head, linknode* pos)

linknode *cur = *head;

if (cur->next == null)

if (pos->next == null)

pos->data = pos->next->data;

linknode *to_delete = pos->next;

pos->next = pos->next->next;

linklistdestorynode(to_delete);

}//刪除指定值的元素

void linklistremove(linknode** head, linktype to_delete)

linknode* cur = *head;

if (cur->next == null)

return;

} while (cur->next != null)

cur = cur->next;

} //沒有找到節點

return;

}//指定值的所有元素都刪掉.

void linklistremoveall(linknode** head, linktype value)

linknode *cur = *head;

if (cur->next == null)

while (cur->next != null)

return;

}//判斷鍊錶是否為空

int linklistempty(linknode* head)

//求鍊錶的元素個數

size_t linklistsize(linknode* head)

size_t count = 1;

linknode *cur = head;

while (cur->next != null)

return count;

}

#include "linklist.h"

#define fun_header printf("\n***************===%s***************===\n",__function__);

void linklistprintchar(linknode *head,char *ch)

printf("[null]\n");

}void testinit()

void testpushback()

void testpopback()

void tsetpushfront()

void testpopfront()

void testlinklistfind()

void testinsert()

void testinsertafter()

void testerase()

void tetserase2()

void testremove()

void testremoveall()

void testempty()

void testlinksize()

int main()

單向鍊錶的基本操作

這篇文章也是為了複習下,同時為字典樹做下準備 鍊錶操作包括建立,刪除,增加,排序,輸出等操作,後續將 貼上 單向鍊錶 head null 空鍊錶 head p1 p2 pn null p1 next p2 next pn next include include int n 0 節點個數 typed...

c 實現單向鍊錶基本操作

最近又開始了資料結構的學習,去年下半年也學過一段時間,沒能堅持下去,希望這次能堅持久一點,把基礎的資料結構都能掌握 這是我最近對單向鍊錶的一些學習情況 我先是聽mooc的浙大資料結構的課程,在頭腦裡建立起資料結構的形象和特徵,這種方法不一定很好,只是目前我對資料結構的一種學習方法 在看完一種資料結構...

C語言 單向鍊錶的基本操作

define crt secure no warnings include include include typedef struct node node 建立頭節點和鍊錶 鍊錶的頭結點位址由函式值返回 node slistcreat return head 鍊錶的遍歷 int slistprin...