如果要看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...