對於單向鍊錶的10幾種常用演算法 c語言

2021-07-09 08:06:46 字數 3736 閱讀 9054

如果要看c++版本的,請轉

list.c檔案如下

#include "list.h"

/*返回head鍊錶pos節點的位置*/

link list_moov_pos(link head,int pos)

/*求鍊錶長度*/

int list_length(link *head)

return i;

}/* 判斷鍊錶是否為空 */

bool list_empty(link *head)

/* 對鍊錶進行氣泡排序 */

link list_sort(link *head)

} }free(cache);

return node;

}/*刪除鍊錶head中第pos個節點的資料*/

bool list_pos_dele(link *head, int pos)else

return true;

}/*刪除鍊錶head頭pos個刪除*/

bool list_head_dele(link *head ,int pos)

/*頭新增*/

void list_head_add(link *head, data data)else

}/*尾巴新增*/

void list_end_add(link *head, data data)else

} /*任意改動*/

bool list_random_change(link *head, data data, int pos)

/*任意節點前面插入資料*/

bool list_random_insert(link *head, data data, int pos) else

return true;

}/*鍊錶head1 和head2 各自有序,合併成乙個鍊錶依然有序(遞迴方法)*/

link list_merge_recursive(link *head1, link *head2) else

return head;

}/*將鍊錶逆序*/

link list_reverse(link *head)

/*此時q指向原始鍊錶最後乙個元素,也是逆轉後的鍊錶的表頭元素*/

(*node).pnext->pnext = null; /*設定鍊錶尾*/

(*node).pnext = p; /*調整煉表頭*/

data data;

data = node->data;

list_end_add(&node,data);

list_pos_dele(&node,1);

return node;

}/*連線2個鍊錶*/

link list_concatenate(link *head1,link *head2)

/*銷毀鍊錶*/

void list_free(link *head)

}

list.h檔案如下

#ifndef list_h

#define list_h

#include #include #include #include #include typedef struct listdata;

typedef struct list_alllist_data;

typedef list_data* link;

#include "list.h"

/*返回head鍊錶pos節點的位置*/

link list_moov_pos(link head,int pos);

/*求鍊錶長度*/

int list_length(link *head);

/* 判斷鍊錶是否為空 */

bool list_empty(link *head);

/* 對鍊錶進行氣泡排序 */

link list_sort(link *head);

/*刪除鍊錶head中第pos個節點的資料*/

bool list_pos_dele(link *head, int pos);

/*刪除鍊錶head頭pos個刪除*/

bool list_head_dele(link *head ,int pos);

/*頭新增*/

void list_head_add(link *head, data data);

/*尾巴新增*/

void list_end_add(link *head, data data);

/*任意改動*/

bool list_random_change(link *head, data data, int pos);

/*任意節點前面插入資料*/

bool list_random_insert(link *head, data data, int pos);

/*鍊錶head1 和head2 各自有序,合併成乙個鍊錶依然有序(遞迴方法)*/

link list_merge_recursive(link *head1, link *head2);

/*將鍊錶逆序*/

link list_reverse(link *head);

/*連線2個鍊錶*/

link list_concatenate(link *head1,link *head2);

/*銷毀鍊錶*/

void list_free(link *head);

#endif

main.c檔案如下

#include "list.h"

link head = null;

void add_head()//往頭新增資料

}void add_tail()//往尾新增資料

}void add_arbitrarily(int pos)//任意插入

void any_change(int pos)//任意改動

void printf_data(link *head)

printf("\n");

}int main(int argc, char const *argv)

//head = list_merge_recursive(&head,&test);/*合併head 和 test 鍊錶*/

// printf_data(&head);

printf("====直接按順序連線2個鍊錶====11\n");

/*按順序連線2個鍊錶*/

head = list_concatenate(&test,&head);//test 在前

printf_data(&head);

printf("*****=判斷鍊錶是否為空*****==12\n");

if(list_empty(&head))

printf("list is null\n");

else

printf("list don't null\n");

printf("**********==銷毀鍊錶*****====13\n");

list_free(&head);//銷毀鍊錶

printf_data(&head);

printf("*****=判斷鍊錶是否為空*****==14\n");

if(list_empty(&head))

printf("list is null\n");

else

printf("list don't null\n");

}

對於單向鍊錶的10幾種常用演算法 c 語言

如果要看c語言的請轉到 table.cpp檔案 include table.h table table 鍊錶初始化 void table listinit list data head 資料報初始化 void table datainit data data 判斷鍊錶是否為空 bool table ...

10單向鍊錶(slist)

1 slist概述 slist並不在標準規格之內,sllist和list的主要差別在於,slist的迭代器屬於單向的forward iterator,而list的迭代器屬於雙向的bidirectional iterator。由於slist沒有任何方便的辦法可以回頭定出前乙個位置,必須從頭找起,所以對...

演算法 反轉單向鍊錶

廢話少說,直接上 單向鍊錶模型,如下 public class listnode override public string tostring sb.return sb.tostring 方法一 遍歷元素,依此反轉位置private static listnode reversenode1 lis...