2.单链表

120 阅读1分钟

说在前面

链表的创建以及实现方式千奇百怪,比如第一个结点是否储存数据,尾插还是头插,在循环的时候是while(p)起手还是while(p->Next!=NULL)进行遍历,以及如何定义链表结点的下标,第一个有效结点的下标应该规定为1还是0,这样的规定五花八门,依照个人的习惯以及业务的需求来,但如果一个链表如果没有说明白这些事情,在我看来无异于耍流氓........

代码以及实现

0.宏定义以及注释

uTools_1651061659207.png

1.结构体

uTools_1651061680567.png

2.链表初始化

uTools_1651061699189.png

3.链表打印

uTools_1651061709460.png

4.尾插

uTools_1651061724460.png

5.尾删

uTools_1651061735016.png

6.选定位置进行尾插

uTools_1651061766234.png

7.返回指定元素的下标

uTools_1651061781900.png

8.返回指定下标的元素

uTools_1651061793638.png

9.main函数

/*创建空链表*/
    LinkList My_List;
    My_List = InitLinkList();

    /*打印空链表*/
    PrintLinkList(My_List);

    /*增加元素*/
    AppendElement(My_List, 5);
    AppendElement(My_List, 4);
    AppendElement(My_List, 3);
    AppendElement(My_List, 2);
    AppendElement(My_List, 1);

    /*打印*/
    printf("First:");
    PrintLinkList(My_List);

    /*尾删*/
    DeleteElement(My_List);

    /*打印*/
    printf("Second:");
    PrintLinkList(My_List);

    /*选定位置进行插入*/
    insertElement(My_List, 100, 1);

    /*打印*/
    printf("Thrid:");
    PrintLinkList(My_List);

    /*返回指定元素的下标*/
    int OUT;
    int Test_Elem = 4;
    FromElementToSubscripta(My_List, Test_Elem, &OUT);
    printf("元素%d的下标是%d\n", Test_Elem, OUT);

    /*返回指定下标的元素*/
    int Position = 1;
    FromSubscriptaToElement(My_List, Position, &OUT);
    printf("下标%d的元素是%d\n", Position, OUT);
    return 0;

运行结果

uTools_1651200315457.png