美文网首页
C语言编程基础学习——链表详解!

C语言编程基础学习——链表详解!

作者: 凌云C语言游戏开发 | 来源:发表于2018-03-31 18:59 被阅读0次

    链表:

    一系列结构连在一起,每一个结构体变量里面都有一个指针pNext,pNext指向下一个结构体变量,尾节点的pNext指向NULL。

    小编推荐一个学C语言/C++的学习裙【 六二六,八七一,九一六  】邀请码凌云,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    静态链表:

    structstudents stu1 = { 1, "a", NULL };

    structstudents stu2 = { 2, "b", NULL };

    structstudents stu3 = { 3, "c", NULL };

    stu3.pNext = &stu2;

    stu2.pNext = &stu1;

    动态内存分配:

    Malloc();

    void *malloc(unsigned int size)

    这个函数在内存中动态开辟一块内存,unsigned int size决定内存的大小,void *空指针可以强制转换为任何类型的指针。

    这个函数返回一个指针,这个指针就是开辟的内存地址。

    pHead = (structstudents*)malloc(sizeof(structstudents));

    free();

    void free(void *ptr)

    free:释放内存。

    free(pHead);

    1、怎样来创建一个链表。

    创建一块内存:

    struct students *pHead = NULL; //头指针

    struct students *pEnd = NULL; //尾指针

    pHead = (struct students *)malloc(sizeof(struct students)); //开辟头结点

    printf("请输入一个学生的学号和姓名: ");

    scanf("%d%s", &pHead->number, pHead->name);

    pHead->pNext = NULL;

    printf("%d ", pHead->number);

    增:

    1、头部增加:头结点会变 需要返回一个pHead。

    2、新节点的pNext指向pHead。

    3、pHead指向pNew。

    注意:2和3不能逆序。

    //在头部插入一个节点

    structstudents *InsertAtHead(structstudents *pHead)

    {

    //新建一个节点

    printf(" 在头部插入一个节点 ");

    structstudents *pNew;

    pNew = (structstudents*)malloc(sizeof(structstudents));

    printf("请输入新学生的信息! ");

    scanf("%d%s", &pNew->number, pNew->name);

    pNew->pNext = pHead; //让新节点的pNext-》原来的头结点。

    pHead = pNew; //把pHead指向新节点

    count++; //节点数+1

    returnpHead;

    }

    2、在尾部插入一个节点。

    1、创建一个节点pNew

    2、顶一个中间的指针pTemp 通过循环(条件为pTemp->pNext!=null).得到尾节点。

    3、pTemp->pNext=pNew;

    pNew->pNext=NULL;

    在尾部插入一个节点

    void InsertAtEnd(structstudents *pHead)

    {

    //新建一个节点

    printf(" 在尾部插入一个节点 ");

    structstudents *pNew;

    pNew = (structstudents*)malloc(sizeof(structstudents));

    printf("请输入新学生的信息! ");

    scanf("%d%s", &pNew->number, pNew->name);

    structstudents *pTemp;

    pTemp = pHead;

    //for (int i = 1; i

    //{

    // pTemp = pTemp->pNext;

    //}

    //for (; pTemp->pNext != NULL; pTemp = pTemp->pNext);

    while (pTemp->pNext != NULL)

    {

    pTemp = pTemp->pNext;

    }

    pNew->pNext = NULL;

    pTemp->pNext = pNew;

    count++; //节点数

    }

    在中间插入

    //在中间(第几个节点之后)插入节点

    void InsertAtMid(structstudents *pHead, intindex)

    {

    //新建一个节点

    printf(" 在第%d个节点后插入一个节点 ",index);

    structstudents *pNew;

    pNew = (structstudents*)malloc(sizeof(structstudents));

    printf("请输入新学生的信息! ");

    scanf("%d%s", &pNew->number, pNew->name);

    structstudents *pTemp;

    structstudents *pPre;

    pTemp = pHead;

    pPre = pHead;

    for (int i = 1; i

    {

    pPre = pTemp;

    pTemp = pTemp->pNext;

    }

    pPre->pNext = pNew;

    pNew->pNext = pTemp;

    count++;

    }

    相关文章

      网友评论

          本文标题:C语言编程基础学习——链表详解!

          本文链接:https://www.haomeiwen.com/subject/cmhncftx.html