• 单向链表(C语言)


    单向链表

      一:创建以及初始化:

    typedef struct node {
        int elem;
        struct node* next;
    }DataNode;
    ​
    typedef struct {
        int count;
        DataNode* next;
    }*LinkHead,LinkNode;
    ​
    int Init(LinkHead* L) {//传进来的参数要是有指针符号,那么下面在设变量的时候就不用*
        LinkHead p = (LinkHead)malloc(sizeof(LinkHead));
        DataNode* q = (DataNode*)malloc(sizeof(DataNode));
        q->next = NULL;
    ​
        p ->count = 0;
        p->next = q;//表中的元素初始化
        (*L) = p;
        return 0;
    }

     

    二:插入操作:

    int Insert(LinkHead* L, int elem, int pos) {
        if (pos<1 || pos>(*L)->count + 1) {
            return -1;
        }
    ​
        DataNode* q = (DataNode*)malloc(sizeof(DataNode));//新建一个元素
        q->elem = elem;
    ​
        DataNode* p = (*L)->next;//将表中的所有元素提取出来
    for (int i = 1; i < pos; i++) {
            p = p->next;//直到插入的那个元素的位置,之前所有元素遍历(很重要)为了下面方便操作,所以将元素遍历到那个元素的位置,以后就按照这个模式遍历就好
        }
    ​
        q->next = p->next;//把将要插入元素位置的后面所有元素赋值到q->next中暂时储存起来,而在q中已经储存进去了那个新元素,那就是第一个elem中
        p->next = q;//将插入元素后面的东西再插入进去
        (*L)->count += 1;
        return 0;
    }

     

    三:删除操作:

    int Delete(LinkHead* L, int pos) {
        if (pos<1 || pos>(*L)->count + 1)
            return -1;
    ​
        DataNode* p = (*L)->next, * q;
        for (int i = 1; i <= pos; i++) {//因为要删除,所以要空过那个元素,放到后面
            p = p->next;
        }
        q = p->next;
        p->next = q->next;
        free(q);
        (*L)->count -= 1;
        return 0;
    }

     

  • 相关阅读:
    Fix The System Bell
    Autounlock default keyring during login KDE
    打油诗1
    Give your laptop some gaming power
    ubuntu 12.04 wine安装有道词典
    天津工业大学破烂综合教务系统非IE非Windows解决方案
    愤忿,愤,忿
    C Strings (Arrays vs. Pointers)
    深入学习算法的一点拙见
    jquery控制图片按比例缩放
  • 原文地址:https://www.cnblogs.com/instead-everyone/p/13699922.html
Copyright © 2020-2023  润新知