加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

C++中链表操作实例分析

发布时间:2021-01-11 19:35:45 所属栏目:创业 来源:网络整理
导读:链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用

    if(p1->num==num)        //找到了。(结合图4、5理解)
    {
        if (p1 == head)        //如果要删除的节点是第一个节点
        {
            head = p1->next;    //头指针指向第一个节点的后一个节点,也就是第二个节点。这样第一个节点就不在链表中,即删除
        }
        else            //如果是其它节点,则让原来指向当前节点的指针,指向它的下一个节点,完成删除
        {
            p2->next = p1->next;
        }

        free (p1);        //释放当前节点
        p1 = NULL;
        printf ("ndelete %ld success!n",num);
        n -= 1;            //节点总数减1个
    }
    else                //没有找到
    {
        printf ("n%ld not been found!n",num);
    }

    return head;
}

单向链表的插入图示:
    ---->[NULL](原链表)
   head

   ---->[1]---->[NULL](插入后的链表)
   head   1->next

   图7 空链表插入一个节点
   结合原链表和插入后的链表,就很容易写出相应的代码。操作方法如下:
  1、你要明白空链表head指向NULL就是head=NULL;
  2、插入后head指向第1个节点,就是让head=1,1->next=NULL,OK这样就行了。

  ---->[1]---->[2]---->[3]...---->[n]---->[NULL](原链表)
  head   1->next  2->next  3->next   n->next

  ---->[1]---->[2]---->[x]---->[3]...---->[n]---->[NULL](插入后的链表)
  head   1->next  2->next  x->next  3->next   n->next

  图8:有N个节点的链表,插入一个节点(这里图示插入第2个后面)
  结合原链表和插入后的链表,就很容易写出相应的代码。操作方法如下:
 1、你要明白原1->next就是节点2,2->next就是节点3;
 2、插入后x指向第3个节点,2指向x,就是让x->next=2->next,1->next=x。

 插入指定节点的后面的函数为:

/*
==========================
 功能:插入指定节点的后面
  (此例中是指定学号的节点)
 返回:指向链表表头的指针
==========================
*/
struct student *Insert (struct student *head,int num,struct student *node)
{
    struct student *p1;        //p1保存当前需要检查的节点的地址
    if (head == NULL)        //(结合图示7理解)
    {
        head = node;
        node->next = NULL;
        n += 1;
        return head;
    }

    p1 = head;
    while(p1->num != num && p1->next != NULL)     //p1指向的节点不是所要查找的,并且它不是最后一个节点,继续往下找
    {
        p1 = p1->next;        //后移一个节点
    }

    if (p1->num==num)        //找到了(结合图示8理解)
    {
        node->next = p1->next;    //显然node的下一节点是原p1的next
        p1->next = node;        //插入后,原p1的下一节点就是要插入的node
        n += 1;            //节点总数增加1个
    }
    else
    {
        printf ("n%ld not been found!n",num);
    }
    return head;
}

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读