数据结构Day1-单向链表

1 阅读39分钟

数据结构

链表

链表是数据结构中最常用的线性结构,许多非线性结构也都是链表节点魔改后形成的非链式结构。

链表的分类

  1. 按有无头节点分

    1. 不含头节点的链表:这种链表存在操作不统一的问题,操作第一个节点和后面的第i个节点代码不同,代码简洁性不佳
    2. 含有头节点的链表:操作统一,易于编码
  2. 按链表结构分

    1. 单向链表:每个节点只有一个指针,指向自己的后继

    2. 双向链表:每个节点有两个指针,一个指向自己的前驱,一个指向自己的后继

    3. 循环链表:尾节点指针指向头节点

      1. 单向循环链表:每个节点只有一个指针,指向自己的后继
      2. 双向循环链表:每个节点有两个指针,一个指向自己的前驱,一个指向自己的
  3. 特殊操作链表

    1. 栈:像弹夹,先压入的子弹(元素)后射出(出栈)

    2. 队列:像水管,先进入队列的元素先出队列

      1. 一般队列:队列一侧只能插入,另一侧只能弹出
      2. 双向队列:两侧都可以插入或者删除

单向链表的定义与功能

声明头文件如下:

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);//获取链表长度(不包括头节点)

功能函数

  1. 初始化函数
  2. 插入函数
  3. 删除函数
  4. 按索引获取节点元素值
  5. 按元素值获取节点指针
  6. 打印链表
  7. 获取链表长度

函数的具体实现

函数初始化
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
​
========== 所有测试完成 ==========