• 简单的线性表2


    今天就来讲一讲插入节点

      对我来说链表重要的是画图,有了图才能理解,所以我会根据自己的理解附上图解,便于理解。

      先跟增加节点对比

      尾增:先开辟空间,填充数据

          然后连接链表,把指针移动到最后一个节点再连接新的节点

                      

         

    void AddListNode(Pt_Stu plist) 
    {
        Pt_Stu pnode = (Pt_Stu)malloc(sizeof(STU));
    printf("input number:"); scanf("%d", &pnode->number); printf("input name:"); scanf("%s", pnode->name); printf("input score:"); scanf("%f", &pnode->math); pnode->pnext = NULL; while (plist->pnext != NULL) { plist = plist->pnext; } plist ->pnext = pnode; }

      

      头增:同样的开辟空间,填充数据,但是是从头部增加,也就是空头节点的下一个节点 

             显然头增法的代码会简单一点,速度也更快,不需要把指针一直往后移动 ,但是顺序与你输入的顺序是相反的

    pnode->pnext = plist->pnext;
        plist->pnext = pnode;

      而插入节点与增加类似,只不过是在链表给定位置的地方增加一个节点罢了

     看样子同样是开辟空间,填充数据,连接链表

    void InsertNode(Pt_Stu plist,int pos)//pos代表节点在链表中的位置
    {
        Pt_Stu pnode = (Pt_Stu)malloc(sizeof(STU));
    
        printf("input number:");
        scanf("%d", &pnode->number);
        printf("input name:");
        scanf("%s", pnode->name);
        printf("input score:");
        scanf("%f", &pnode->math);
        pnode->pnext = NULL;
        for(int i=0;i<pos-1;i++){
            plist=plist->pnext;//pos-1是为了到插入位置的前一个节点
            pnode->pnext=plist->pnext;//新节点的下一个节点指向原先插入位置的节点
            plist->next=pnode;//前一个位置的节点指向新的节点
       }
    }

      而修改节点就和删除类似了,找到指定位置的节点,可以把数据重新赋值,也可利用拷贝字符串来解决。

      ps:说起拷贝字符串,我在VS2019里直接用会因为没有加''运行会报错,我会选择自己写一个拷贝字符串来解决。

    代码如下

    void StrCpy(char* strOld, char  const* strNew)
    {
        int i; 
        for (i = 0; i < strlen(strNew); i++)
        {
            strOld[i] = strNew[i];
        }
        strOld[strlen(strNew)] = '';
    }

      

            带有空头结点的链表就到这了,事实上我们可以发现只要脑子里面有图,链表的增删查改插入我们都可以做到,方法也都大同小异

  • 相关阅读:
    《Java编程思想第四版》附录 B 对比 C++和 Java
    《Java编程思想第四版》附录 C Java 编程规则
    《尚学堂_史上最易懂的设计模式视频》--章节1 责任链模式-- 过滤器模式
    《Effective Java中文版(第2版).pdf》-笔记
    javascript面试--网络收集
    眼睛问题
    网易云课堂《JS原创视频教程-知识点类》
    定时刷新页面SetInterval 和setTimeout -时间间隔可以动态设定
    MSSQL无法启动-原来电脑登录密码改了,重启后要设置
    Thymeleaf--:fragment
  • 原文地址:https://www.cnblogs.com/wst-blog/p/12709724.html
Copyright © 2020-2023  润新知