数据结构之单链表

Author Avatar
w-xuefeng 4月 01, 2018
  • 在其它设备中阅读本文章

单链表节点类型定义

    typedef int DataType; //定义数据类型,此处以整型为例
    typedef struct node{
        DataType data; //节点的数据域
        struct node *next; //节点的指针域
    }NODE,*LinkList;

单链表的运算函数

查找


    /**
    *
    * @function 在表中查找第k个元素,若找到,返回该元素节点的指针;否则返回空指针NULL
    * @parameter L 带头节点单链表的头指针
    * @parameter k 要查找元素的位置
    * @return 查找到元素节点的指针或者空指针NULL
    *
    */

    LinkList Find_List(LinkList L, int k){
        LinkList p = L->next; //令p指向第一个元素
        int i = 1; //初始化计数器
        while(p && i < k )&#123; //依次向后查找,直到p指向第k个元素节点或者p为空指针
            p = p->next;
            i++;
        &#125;
        return (p && i==k) ? p : NULL;
    &#125;

插入


    /**
    *
    * @function 将元素newElem插入表中的第k个元素之前即第k-1个元素之后,成功返回0,失败返回-1
    * @parameter L 带头节点单链表的头指针
    * @parameter k 要插入元素的位置
    * @parameter newElem 要插入的新元素
    * @return 0或-1
    *
    */

    int Insert_List(LinkList L, int k, DataType newElem)&#123;
        LinkList p, s; //临时指针
        p = (k == 1)? L : Find_List(L, k-1);
        if(!p) return -1; //表中不从在第k-1个元素
        s = (NODE*)malloc(sizeof(NODE)); //为新元素申请节点空间
        if(!s) return -1; //空间申请失败
        s->data = newElem;
        s->next = p->next;
        p->next = s; //插入元素
        return 0;
    &#125;

删除


    /**
    *
    * @function 删除表中的第k个元素节点,即将第k-1个元素的指针域指向第k+1个元素所在节点,成功返回0,失败返回-1
    * @parameter L 带头节点单链表的头指针
    * @parameter k 要删除元素的位置
    * @return 0或-1
    *
    */

    int Delete_List(LinkList L, int k)&#123;
        LinkList p, q; //临时指针
        p = (k == 1)? L : Find_List(L, k-1);
        if(!p || !p->next) return -1; //表中不从在第k个元素
        q = p->next;
        p->next = q->next;
        free(q); //删除节点
        return 0;
    &#125;

本博客遵循署名 4.0 协议国际版 (CC BY 4.0)协议
本文链接:https://xuefeng.is-a.dev/archives/linear-table-of-data-structures

(●'◡'●)
如果你觉得不错或者对你有帮助, 你可以替我买一杯咖啡 ☕
If you think it's good or helpful,   you can buy me a cup of coffee ☕
buy me a coffce via ailpay Ailpay
buy me a coffce via wechat Wechat