数据结构
链表
链表是数据结构中最常用的线性结构,许多非线性结构也都是链表节点魔改后形成的非链式结构。
链表的分类
-
按有无头节点分
- 不含头节点的链表:这种链表存在操作不统一的问题,操作第一个节点和后面的第i个节点代码不同,代码简洁性不佳
- 含有头节点的链表:操作统一,易于编码
-
按链表结构分
-
单向链表:每个节点只有一个指针,指向自己的后继
-
双向链表:每个节点有两个指针,一个指向自己的前驱,一个指向自己的后继
-
循环链表:尾节点指针指向头节点
- 单向循环链表:每个节点只有一个指针,指向自己的后继
- 双向循环链表:每个节点有两个指针,一个指向自己的前驱,一个指向自己的
-
-
特殊操作链表
-
栈:像弹夹,先压入的子弹(元素)后射出(出栈)
-
队列:像水管,先进入队列的元素先出队列
- 一般队列:队列一侧只能插入,另一侧只能弹出
- 双向队列:两侧都可以插入或者删除
-
单向链表的定义与功能
声明头文件如下:
typedef int E;// 对节点内数据起别名,如果要其他类型,可以修改
typedef struct LinkNode{
E element; // 链表节点元素
struct LinkNode * next; //指向自己后继的指针
}linkNode;
typedef struct LinkNode * Node ;// 对链表指针起别名
void InitLinkList(Node Head);// 对链表进行初始化:定义头节点初始参数
_Bool insertLinkList(Node Head,E element,int index);//插入节点
_Bool deleteLinkList(Node Head,int index);//删除元素
E GetElementByIndex(Node Head,int index);//根据元素在链表中的位置获取节点的元素值
Node GetPointByElement(Node Head,E element);//根据元素取值寻找对应节点
void printLinkList(Node head);//打印整个链表
int GetLinkListSize(Node head);//获取链表长度(不包括头节点)
功能函数
- 初始化函数
- 插入函数
- 删除函数
- 按索引获取节点元素值
- 按元素值获取节点指针
- 打印链表
- 获取链表长度
函数的具体实现
函数初始化
void InitLinkList(Node Head){
if(Head == NULL){
printf("[ERROR]:undefined LinkList\n ");
return;
}//判断是否传入无效地址
Head->next =NULL;//将头节点指针置空
printf("[LOG]:This new LinkList 's Adress is %p\n",Head);//打印信息
}
插入函数
插入的核心就是找到待插入位置的前驱节点,将待插入节点的后继置为当前该位置的地址,将前驱节点的指针置为待插入节点的地址,同时注意插入索引的合法性[1.size+1 ]
_Bool insertLinkList(Node Head,E element,int index){
if(Head==NULL){
printf("[LOG]: undefined LinkList\n");
return 0;
}//判断传入指针是否为空指针
if(index<1){
printf("[ERROR]:Wrong index\n");
return 0;
}//判断插入位置合法性:正常的插入位置是1~size+1,也就是第一个位置(头节点后的第一个)到最后一个节点之后
while(--index){
if(Head->next== NULL) return 0;//限制只能插入到最后一个节点的后面
Head = Head->next;//移动指针
}
Node node = malloc(sizeof(struct LinkNode)); // malloc是给指针分配内存
node->element = element;//给节点元素赋值
node->next = Head->next;//修改待插入节点的后继指针为为当前指针的后继
Head->next = node;//修改当前指针的后继为待插入节点
printf("[LOG]:insert success\n[INFO]:Front Node address = %p,Target Node address = %p\n",Head,node);//打印信息
return 1;
}
删除函数
删除的核心就是找到待插入位置的前驱节点,先记录待删除节点的指针,将前驱节点的后继置为待删除节点的后继,最后释放待删除节点的内存空间
_Bool deleteLinkList(Node Head,int index){
if(Head==NULL){
printf("[ERROR]:undefined LinkList\n");
return 0;
}//判断指针是否为空
if(index<1){
printf("[ERROR]:Wrong index\n");
return 0;
}//判断插入位置合法性
Node DeleteNode;//设置指针变量,准备记录待删除节点的指针
while(--index){
if(Head->next == NULL){
printf("[ERROR]:Wrong index\n");
return 0;
}//寻找待删除节点的前驱
Head = Head->next;//移动指针位置
}
DeleteNode = Head->next;//记录待删除指针的地址
Head->next = Head->next->next;//重置待删除节点的前驱节点的指针
printf("[LOG]:Delete success,Node Adress = %p,Node element = %d\n"
,DeleteNode,DeleteNode->element);
free(DeleteNode);//释放节点的地址空间
return 1;
}
打印函数
void printLinkList(Node head){
if(head==NULL){
printf("[ERROR]: undefined LinkList\n");
return ;
}
while(head->next!= NULL){
head = head->next;
printf("[%d,%p]->",head->element,head->next);
}
return;
}
获取链表长度
int GetLinkListSize(Node Head){
if(Head == NULL){
printf("[ERROR]:undefined LinkList\n");
return 0;
}//指针判空
int Size = 0;
while(Head->next){
Head = Head->next;
Size++;
}//遍历整个链表并更新size变量
return Size;
}
按位置查找
E GetElementByIndex(Node Head,int index){
if(Head==NULL){
printf("[ERROR]:undefined LinkList\n");
return -1;
}//指针判空
if(index<1||index>GetLinkListSize(Head)){
printf("[ERROR]:Wrong index\n");
return -1;
}//查找位置合法性判断
while(index--){
Head = Head->next;
}//移动指针
return Head->element;//返回对应索引的元素
}
按值查找节点
Node GetPointByElement(Node Head,E element){
if(Head==NULL){
printf("[ERROR]:undefined LinkList\n");
return NULL;
}//指针判空
while(Head->next!=NULL){
Head = Head->next;//移动指针
if(Head->element == element){//和每个节点的元素做匹配
printf("[LOG]:Find success\n[INFO]: Node Address = %p,Node element = %d\n",Head,Head->element);
return Head;//找到立刻返回
}
}
printf("[LOG]:this element not in the LinkList\n");
return NULL;
}
功能测试
测试代码
#include <stdio.h>
#include <stdlib.h>
#include "LinkNode.h"
int main() {
printf("========== 链表完整功能测试 ==========\n\n");
// 创建头结点
linkNode Head;
Node head = &Head;
InitLinkList(head);
printf("\n========== 1. 插入测试 ==========\n");
printf("\n--- 在位置1插入10 ---\n");
insertLinkList(head, 10, 1);
printLinkList(head);
printf("\n--- 在位置2插入20 ---\n");
insertLinkList(head, 20, 2);
printLinkList(head);
printf("\n--- 在位置2插入30 ---\n");
insertLinkList(head, 30, 2);
printLinkList(head);
printf("\n--- 在位置1插入5 ---\n");
insertLinkList(head, 5, 1);
printLinkList(head);
printf("\n--- 在位置4插入25 ---\n");
insertLinkList(head, 25, 4);
printLinkList(head);
printf("\n--- 在位置1插入100 ---\n");
insertLinkList(head, 100, 1);
printLinkList(head);
printf("\n========== 2. 获取大小 ==========\n");
int size = GetLinkListSize(head);
printf("当前链表大小: %d\n", size);
printf("\n========== 3. 按索引获取元素 ==========\n");
for(int i = 1; i <= size; i++) {
E elem = GetElementByIndex(head, i);
printf("位置 %d 的元素: %d\n", i, elem);
}
printf("\n--- 测试无效索引 ---\n");
printf("位置0: %d\n", GetElementByIndex(head, 0));
printf("位置100: %d\n", GetElementByIndex(head, 100));
printf("\n========== 4. 按元素获取节点指针 ==========\n");
printf("\n--- 查找存在的元素25 ---\n");
Node p = GetPointByElement(head, 25);
if(p != NULL) {
printf("找到节点,值为: %d\n", p->element);
}
printf("\n--- 查找存在的元素5 ---\n");
p = GetPointByElement(head, 5);
if(p != NULL) {
printf("找到节点,值为: %d\n", p->element);
}
printf("\n--- 查找不存在的元素999 ---\n");
p = GetPointByElement(head, 999);
if(p == NULL) {
printf("未找到节点\n");
}
printf("\n========== 5. 删除测试 ==========\n");
printf("\n--- 删除位置3 ---\n");
deleteLinkList(head, 3);
printLinkList(head);
printf("\n--- 删除位置1 ---\n");
deleteLinkList(head, 1);
printLinkList(head);
printf("\n--- 删除最后位置 ---\n");
int currentSize = GetLinkListSize(head);
deleteLinkList(head, currentSize);
printLinkList(head);
printf("\n--- 删除位置2 ---\n");
deleteLinkList(head, 2);
printLinkList(head);
printf("\n--- 测试无效删除 ---\n");
deleteLinkList(head, 0);
deleteLinkList(head, 10);
printLinkList(head);
printf("\n========== 6. 边界测试 ==========\n");
printf("当前链表: ");
printLinkList(head);
printf("当前大小: %d\n", GetLinkListSize(head));
printf("\n--- 向空链表插入测试 ---\n");
linkNode EmptyHead;
Node emptyHead = &EmptyHead;
InitLinkList(emptyHead);
printf("空链表大小: %d\n", GetLinkListSize(emptyHead));
printf("插入元素999到位置1:\n");
insertLinkList(emptyHead, 999, 1);
printLinkList(emptyHead);
printf("\n--- 从单节点链表删除 ---\n");
deleteLinkList(emptyHead, 1);
printLinkList(emptyHead);
printf("\n========== 7. 压力测试 ==========\n");
linkNode StressHead;
Node stressHead =&StressHead;
InitLinkList(stressHead);
printf("\n--- 插入100个元素 ---\n");
for(int i = 1; i <= 100; i++) {
insertLinkList(stressHead, i*10, i);
if(i % 20 == 0) {
printf("已插入 %d 个元素, 当前大小: %d\n", i, GetLinkListSize(stressHead));
}
}
printf("\n--- 删除50个元素 (每隔一个删一个) ---\n");
for(int i = 1; i <= 50; i++) {
deleteLinkList(stressHead, i);
if(i % 10 == 0) {
printf("已删除 %d 个元素, 当前大小: %d\n", i, GetLinkListSize(stressHead));
}
}
printf("\n最终压力测试链表: ");
printLinkList(stressHead);
printf("最终大小: %d\n", GetLinkListSize(stressHead));
printf("\n========== 8. GetPointByElement 综合测试 ==========\n");
linkNode TestHead;
Node testHead = &TestHead;
InitLinkList(testHead);
// 插入测试数据
insertLinkList(testHead, 11, 1);
insertLinkList(testHead, 22, 2);
insertLinkList(testHead, 33, 3);
insertLinkList(testHead, 44, 4);
insertLinkList(testHead, 55, 5);
printf("测试链表: ");
printLinkList(testHead);
printf("\n--- 查找头部元素11 ---\n");
Node found = GetPointByElement(testHead, 11);
if(found) printf("找到: %d at %p\n", found->element, found);
printf("\n--- 查找中间元素33 ---\n");
found = GetPointByElement(testHead, 33);
if(found) printf("找到: %d at %p\n", found->element, found);
printf("\n--- 查找尾部元素55 ---\n");
found = GetPointByElement(testHead, 55);
if(found) printf("找到: %d at %p\n", found->element, found);
printf("\n--- 查找不存在的元素100 ---\n");
found = GetPointByElement(testHead, 100);
if(!found) printf("正确返回NULL\n");
printf("\n========== 9. 综合操作测试 ==========\n");
linkNode FinalHead;
Node finalHead = &FinalHead;
InitLinkList(finalHead);
// 混合操作
printf("\n初始插入: ");
insertLinkList(finalHead, 1, 1);
insertLinkList(finalHead, 3, 2);
insertLinkList(finalHead, 5, 3);
printLinkList(finalHead);
printf("在位置2插入2: ");
insertLinkList(finalHead, 2, 2);
printLinkList(finalHead);
printf("在位置4插入4: ");
insertLinkList(finalHead, 4, 4);
printLinkList(finalHead);
printf("删除位置3: ");
deleteLinkList(finalHead, 3);
printLinkList(finalHead);
printf("查找元素4: ");
Node foundNode = GetPointByElement(finalHead, 4);
if(foundNode) printf("找到元素4,地址: %p\n", foundNode);
printf("最终结果: ");
for(int i = 1; i <= GetLinkListSize(finalHead); i++) {
printf("%d ", GetElementByIndex(finalHead, i));
}
printf("\n");
printf("\n========== 所有测试完成 ==========\n");
return 0;
}
测试结果
========== 链表完整功能测试 ==========
[LOG]:This new LinkList 's Adress is 00000044363FF980
========== 1. 插入测试 ==========
--- 在位置1插入10 ---
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF980,Target Node address = 00000221D638E020
[10,0000000000000000]->
--- 在位置2插入20 ---
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E020,Target Node address = 00000221D638E300
[10,00000221D638E300]->[20,0000000000000000]->
--- 在位置2插入30 ---
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E020,Target Node address = 00000221D638E200
[10,00000221D638E200]->[30,00000221D638E300]->[20,0000000000000000]->
--- 在位置1插入5 ---
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF980,Target Node address = 00000221D638E140
[5,00000221D638E020]->[10,00000221D638E200]->[30,00000221D638E300]->[20,0000000000000000]->
--- 在位置4插入25 ---
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E200,Target Node address = 00000221D638E3A0
[5,00000221D638E020]->[10,00000221D638E200]->[30,00000221D638E3A0]->[25,00000221D638E300]->[20,0000000000000000]->
--- 在位置1插入100 ---
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF980,Target Node address = 00000221D638E080
[100,00000221D638E140]->[5,00000221D638E020]->[10,00000221D638E200]->[30,00000221D638E3A0]->[25,00000221D638E300]->[20,0000000000000000]->
========== 2. 获取大小 ==========
当前链表大小: 6
========== 3. 按索引获取元素 ==========
位置 1 的元素: 100
位置 2 的元素: 5
位置 3 的元素: 10
位置 4 的元素: 30
位置 5 的元素: 25
位置 6 的元素: 20
--- 测试无效索引 ---
[ERROR]:Wrong index
位置0: -1
[ERROR]:Wrong index
位置100: -1
========== 4. 按元素获取节点指针 ==========
--- 查找存在的元素25 ---
[LOG]:Find success
[INFO]: Node Address = 00000221D638E3A0,Node element = 25
找到节点,值为: 25
--- 查找存在的元素5 ---
[LOG]:Find success
[INFO]: Node Address = 00000221D638E140,Node element = 5
找到节点,值为: 5
--- 查找不存在的元素999 ---
[LOG]:this element not in the LinkList
未找到节点
========== 5. 删除测试 ==========
--- 删除位置3 ---
[LOG]:Delete success,Node Adress = 00000221D638E020,Node element = 10
[100,00000221D638E140]->[5,00000221D638E200]->[30,00000221D638E3A0]->[25,00000221D638E300]->[20,0000000000000000]->
--- 删除位置1 ---
[LOG]:Delete success,Node Adress = 00000221D638E080,Node element = 100
[5,00000221D638E200]->[30,00000221D638E3A0]->[25,00000221D638E300]->[20,0000000000000000]->
--- 删除最后位置 ---
[LOG]:Delete success,Node Adress = 00000221D638E300,Node element = 20
[5,00000221D638E200]->[30,00000221D638E3A0]->[25,0000000000000000]->
--- 删除位置2 ---
[LOG]:Delete success,Node Adress = 00000221D638E200,Node element = 30
[5,00000221D638E3A0]->[25,0000000000000000]->
--- 测试无效删除 ---
[ERROR]:Wrong index
[ERROR]:Wrong index
[5,00000221D638E3A0]->[25,0000000000000000]->
========== 6. 边界测试 ==========
当前链表: [5,00000221D638E3A0]->[25,0000000000000000]->当前大小: 2
--- 向空链表插入测试 ---
[LOG]:This new LinkList 's Adress is 00000044363FF970
空链表大小: 0
插入元素999到位置1:
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF970,Target Node address = 00000221D638E300
[999,0000000000000000]->
--- 从单节点链表删除 ---
[LOG]:Delete success,Node Adress = 00000221D638E300,Node element = 999
========== 7. 压力测试 ==========
[LOG]:This new LinkList 's Adress is 00000044363FF960
--- 插入100个元素 ---
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF960,Target Node address = 00000221D638E1E0
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E1E0,Target Node address = 00000221D638E020
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E020,Target Node address = 00000221D638E2A0
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E2A0,Target Node address = 00000221D638E100
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E100,Target Node address = 00000221D638E120
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E120,Target Node address = 00000221D638E300
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E300,Target Node address = 00000221D638E200
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E200,Target Node address = 00000221D638E320
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E320,Target Node address = 00000221D638E280
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E280,Target Node address = 00000221D638E340
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E340,Target Node address = 00000221D638E0A0
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E0A0,Target Node address = 00000221D638E360
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E360,Target Node address = 00000221D638E160
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E160,Target Node address = 00000221D638E040
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E040,Target Node address = 00000221D638E060
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E060,Target Node address = 00000221D638E080
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E080,Target Node address = 00000221D638E180
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E180,Target Node address = 00000221D638E1C0
[LOG]:insert success
[INFO]:Front Node address = 00000221D638E1C0,Target Node address = 00000221D63905D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63905D0,Target Node address = 00000221D6390950
已插入 20 个元素, 当前大小: 20
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390950,Target Node address = 00000221D63906F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63906F0,Target Node address = 00000221D63908F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63908F0,Target Node address = 00000221D6390630
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390630,Target Node address = 00000221D63908D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63908D0,Target Node address = 00000221D63904D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63904D0,Target Node address = 00000221D63909B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63909B0,Target Node address = 00000221D6390490
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390490,Target Node address = 00000221D6390A90
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390A90,Target Node address = 00000221D6390B70
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390B70,Target Node address = 00000221D6390B90
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390B90,Target Node address = 00000221D63906B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63906B0,Target Node address = 00000221D6390AB0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390AB0,Target Node address = 00000221D6390BD0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390BD0,Target Node address = 00000221D63907B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63907B0,Target Node address = 00000221D63905F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63905F0,Target Node address = 00000221D6390450
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390450,Target Node address = 00000221D6390910
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390910,Target Node address = 00000221D6390510
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390510,Target Node address = 00000221D6390530
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390530,Target Node address = 00000221D6390710
已插入 40 个元素, 当前大小: 40
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390710,Target Node address = 00000221D6390870
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390870,Target Node address = 00000221D6390830
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390830,Target Node address = 00000221D6390990
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390990,Target Node address = 00000221D63909D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63909D0,Target Node address = 00000221D6390730
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390730,Target Node address = 00000221D6390550
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390550,Target Node address = 00000221D6390930
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390930,Target Node address = 00000221D6390A30
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390A30,Target Node address = 00000221D6390970
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390970,Target Node address = 00000221D63904F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63904F0,Target Node address = 00000221D6390750
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390750,Target Node address = 00000221D6390850
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390850,Target Node address = 00000221D6390650
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390650,Target Node address = 00000221D63909F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63909F0,Target Node address = 00000221D6390570
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390570,Target Node address = 00000221D6390B50
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390B50,Target Node address = 00000221D6390890
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390890,Target Node address = 00000221D63907F0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63907F0,Target Node address = 00000221D6390670
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390670,Target Node address = 00000221D6390AD0
已插入 60 个元素, 当前大小: 60
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390AD0,Target Node address = 00000221D63904B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63904B0,Target Node address = 00000221D6390A10
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390A10,Target Node address = 00000221D6390590
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390590,Target Node address = 00000221D6390770
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390770,Target Node address = 00000221D63908B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63908B0,Target Node address = 00000221D6390A50
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390A50,Target Node address = 00000221D6390B10
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390B10,Target Node address = 00000221D6390470
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390470,Target Node address = 00000221D6390AF0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390AF0,Target Node address = 00000221D63905B0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63905B0,Target Node address = 00000221D6390610
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390610,Target Node address = 00000221D6390690
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390690,Target Node address = 00000221D6390A70
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390A70,Target Node address = 00000221D6390790
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390790,Target Node address = 00000221D63906D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63906D0,Target Node address = 00000221D63907D0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63907D0,Target Node address = 00000221D6390810
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390810,Target Node address = 00000221D6390B30
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390B30,Target Node address = 00000221D6390BB0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390BB0,Target Node address = 00000221D6391360
已插入 80 个元素, 当前大小: 80
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391360,Target Node address = 00000221D6391380
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391380,Target Node address = 00000221D6390CE0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390CE0,Target Node address = 00000221D6391300
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391300,Target Node address = 00000221D6390EC0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390EC0,Target Node address = 00000221D6390FE0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390FE0,Target Node address = 00000221D6390F00
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390F00,Target Node address = 00000221D63912E0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63912E0,Target Node address = 00000221D63913A0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63913A0,Target Node address = 00000221D6391080
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391080,Target Node address = 00000221D63913E0
[LOG]:insert success
[INFO]:Front Node address = 00000221D63913E0,Target Node address = 00000221D6390D60
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390D60,Target Node address = 00000221D6391320
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391320,Target Node address = 00000221D6390C60
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390C60,Target Node address = 00000221D6390C80
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390C80,Target Node address = 00000221D6390DA0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390DA0,Target Node address = 00000221D6390EA0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390EA0,Target Node address = 00000221D6391340
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391340,Target Node address = 00000221D6390D80
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390D80,Target Node address = 00000221D6390DE0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390DE0,Target Node address = 00000221D6391000
已插入 100 个元素, 当前大小: 100
--- 删除50个元素 (每隔一个删一个) ---
[LOG]:Delete success,Node Adress = 00000221D638E1E0,Node element = 10
[LOG]:Delete success,Node Adress = 00000221D638E2A0,Node element = 30
[LOG]:Delete success,Node Adress = 00000221D638E120,Node element = 50
[LOG]:Delete success,Node Adress = 00000221D638E200,Node element = 70
[LOG]:Delete success,Node Adress = 00000221D638E280,Node element = 90
[LOG]:Delete success,Node Adress = 00000221D638E0A0,Node element = 110
[LOG]:Delete success,Node Adress = 00000221D638E160,Node element = 130
[LOG]:Delete success,Node Adress = 00000221D638E060,Node element = 150
[LOG]:Delete success,Node Adress = 00000221D638E180,Node element = 170
[LOG]:Delete success,Node Adress = 00000221D63905D0,Node element = 190
已删除 10 个元素, 当前大小: 90
[LOG]:Delete success,Node Adress = 00000221D63906F0,Node element = 210
[LOG]:Delete success,Node Adress = 00000221D6390630,Node element = 230
[LOG]:Delete success,Node Adress = 00000221D63904D0,Node element = 250
[LOG]:Delete success,Node Adress = 00000221D6390490,Node element = 270
[LOG]:Delete success,Node Adress = 00000221D6390B70,Node element = 290
[LOG]:Delete success,Node Adress = 00000221D63906B0,Node element = 310
[LOG]:Delete success,Node Adress = 00000221D6390BD0,Node element = 330
[LOG]:Delete success,Node Adress = 00000221D63905F0,Node element = 350
[LOG]:Delete success,Node Adress = 00000221D6390910,Node element = 370
[LOG]:Delete success,Node Adress = 00000221D6390530,Node element = 390
已删除 20 个元素, 当前大小: 80
[LOG]:Delete success,Node Adress = 00000221D6390870,Node element = 410
[LOG]:Delete success,Node Adress = 00000221D6390990,Node element = 430
[LOG]:Delete success,Node Adress = 00000221D6390730,Node element = 450
[LOG]:Delete success,Node Adress = 00000221D6390930,Node element = 470
[LOG]:Delete success,Node Adress = 00000221D6390970,Node element = 490
[LOG]:Delete success,Node Adress = 00000221D6390750,Node element = 510
[LOG]:Delete success,Node Adress = 00000221D6390650,Node element = 530
[LOG]:Delete success,Node Adress = 00000221D6390570,Node element = 550
[LOG]:Delete success,Node Adress = 00000221D6390890,Node element = 570
[LOG]:Delete success,Node Adress = 00000221D6390670,Node element = 590
已删除 30 个元素, 当前大小: 70
[LOG]:Delete success,Node Adress = 00000221D63904B0,Node element = 610
[LOG]:Delete success,Node Adress = 00000221D6390590,Node element = 630
[LOG]:Delete success,Node Adress = 00000221D63908B0,Node element = 650
[LOG]:Delete success,Node Adress = 00000221D6390B10,Node element = 670
[LOG]:Delete success,Node Adress = 00000221D6390AF0,Node element = 690
[LOG]:Delete success,Node Adress = 00000221D6390610,Node element = 710
[LOG]:Delete success,Node Adress = 00000221D6390A70,Node element = 730
[LOG]:Delete success,Node Adress = 00000221D63906D0,Node element = 750
[LOG]:Delete success,Node Adress = 00000221D6390810,Node element = 770
[LOG]:Delete success,Node Adress = 00000221D6390BB0,Node element = 790
已删除 40 个元素, 当前大小: 60
[LOG]:Delete success,Node Adress = 00000221D6391380,Node element = 810
[LOG]:Delete success,Node Adress = 00000221D6391300,Node element = 830
[LOG]:Delete success,Node Adress = 00000221D6390FE0,Node element = 850
[LOG]:Delete success,Node Adress = 00000221D63912E0,Node element = 870
[LOG]:Delete success,Node Adress = 00000221D6391080,Node element = 890
[LOG]:Delete success,Node Adress = 00000221D6390D60,Node element = 910
[LOG]:Delete success,Node Adress = 00000221D6390C60,Node element = 930
[LOG]:Delete success,Node Adress = 00000221D6390DA0,Node element = 950
[LOG]:Delete success,Node Adress = 00000221D6391340,Node element = 970
[LOG]:Delete success,Node Adress = 00000221D6390DE0,Node element = 990
已删除 50 个元素, 当前大小: 50
最终压力测试链表: [20,00000221D638E100]->[40,00000221D638E300]->[60,00000221D638E320]->[80,00000221D638E340]->[100,00000221D638E360]->[120,00000221D638E040]->[140,00000221D638E080]->[160,00000221D638E1C0]->[180,00000221D6390950]->[200,00000221D63908F0]->[220,00000221D63908D0]->[240,00000221D63909B0]->[260,00000221D6390A90]->[280,00000221D6390B90]->[300,00000221D6390AB0]->[320,00000221D63907B0]->[340,00000221D6390450]->[360,00000221D6390510]->[380,00000221D6390710]->[400,00000221D6390830]->[420,00000221D63909D0]->[440,00000221D6390550]->[460,00000221D6390A30]->[480,00000221D63904F0]->[500,00000221D6390850]->[520,00000221D63909F0]->[540,00000221D6390B50]->[560,00000221D63907F0]->[580,00000221D6390AD0]->[600,00000221D6390A10]->[620,00000221D6390770]->[640,00000221D6390A50]->[660,00000221D6390470]->[680,00000221D63905B0]->[700,00000221D6390690]->[720,00000221D6390790]->[740,00000221D63907D0]->[760,00000221D6390B30]->[780,00000221D6391360]->[800,00000221D6390CE0]->[820,00000221D6390EC0]->[840,00000221D6390F00]->[860,00000221D63913A0]->[880,00000221D63913E0]->[900,00000221D6391320]->[920,00000221D6390C80]->[940,00000221D6390EA0]->[960,00000221D6390D80]->[980,00000221D6391000]->[1000,0000000000000000]->最终大小: 50
========== 8. GetPointByElement 综合测试 ==========
[LOG]:This new LinkList 's Adress is 00000044363FF950
[LOG]:insert success
[INFO]:Front Node address = 00000044363FF950,Target Node address = 00000221D6390EE0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390EE0,Target Node address = 00000221D6391260
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391260,Target Node address = 00000221D6390FC0
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390FC0,Target Node address = 00000221D6390D40
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390D40,Target Node address = 00000221D6391380
测试链表: [11,00000221D6391260]->[22,00000221D6390FC0]->[33,00000221D6390D40]->[44,00000221D6391380]->[55,0000000000000000]->
--- 查找头部元素11 ---
[LOG]:Find success
[INFO]: Node Address = 00000221D6390EE0,Node element = 11
找到: 11 at 00000221D6390EE0
--- 查找中间元素33 ---
[LOG]:Find success
[INFO]: Node Address = 00000221D6390FC0,Node element = 33
找到: 33 at 00000221D6390FC0
--- 查找尾部元素55 ---
[LOG]:Find success
[INFO]: Node Address = 00000221D6391380,Node element = 55
找到: 55 at 00000221D6391380
--- 查找不存在的元素100 ---
[LOG]:this element not in the LinkList
正确返回NULL
========== 9. 综合操作测试 ==========
[LOG]:This new LinkList 's Adress is 00000044363FF940
初始插入: [LOG]:insert success
[INFO]:Front Node address = 00000044363FF940,Target Node address = 00000221D6390F20
[LOG]:insert success
[INFO]:Front Node address = 00000221D6390F20,Target Node address = 00000221D6391060
[LOG]:insert success
[INFO]:Front Node address = 00000221D6391060,Target Node address = 00000221D63911A0
[1,00000221D6391060]->[3,00000221D63911A0]->[5,0000000000000000]->在位置2插入2: [LOG]:insert success
[INFO]:Front Node address = 00000221D6390F20,Target Node address = 00000221D6390E20
[1,00000221D6390E20]->[2,00000221D6391060]->[3,00000221D63911A0]->[5,0000000000000000]->在位置4插入4: [LOG]:insert success
[INFO]:Front Node address = 00000221D6391060,Target Node address = 00000221D6391240
[1,00000221D6390E20]->[2,00000221D6391060]->[3,00000221D6391240]->[4,00000221D63911A0]->[5,0000000000000000]->删除位置3: [LOG]:Delete success,Node Adress = 00000221D6391060,Node element = 3
[1,00000221D6390E20]->[2,00000221D6391240]->[4,00000221D63911A0]->[5,0000000000000000]->查找元素4: [LOG]:Find success
[INFO]: Node Address = 00000221D6391240,Node element = 4
找到元素4,地址: 00000221D6391240
最终结果: 1 2 4 5
========== 所有测试完成 ==========