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

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

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

   1、排序后q节点指向p节点,在调整指向之前,我们要保存原p的指向节点地址,即:p2=p1->next->next;
   2、顺着这一步一步往下推,排序后图16中p1->next->next要指的是p2->next,所以p1->next->next=p2->next;
   3、在图15中p2->next原是q发出来的指向,排序后图16中q的指向要变为指向p的,而原来p1->next是指向p的,所以p2->next=p1->next;
   4、在图15中p1->next原是指向p的,排序后图16中p1->next要指向q,原来p1->next->next(即p2)是指向q的,所以p1->next=p2;
   5、至此,我们完成了相邻两节点的顺序交换。
   6、下面的程序描述改进了一点就是记录了每次最后一次节点下沉的位置,这样我们不必每次都从头到尾的扫描,只需要扫描到记录点为止。 因为后面的都已经是排好序的了。

    对链表进行冒泡排序的函数为:

/*
==========================
 功能:冒泡排序(由小到大)
 返回:指向链表表头的指针
==========================
*/
struct student *BubbleSort (struct student *head)
{
    struct student *endpt;      //控制循环比较
    struct student *p;          //临时指针变量
    struct student *p1,*p2;

    p1 = (struct student *) malloc (LEN);
    p1->next = head;           //注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节点没有前驱,我们不能交换地址
    head = p1;                   //让head指向p1节点,排序完成后,我们再把p1节点释放掉

    for (endpt = NULL; endpt != head; endpt = p)    //结合第6点理解
    {
        for (p = p1 = head; p1->next->next != endpt; p1 = p1->next)
        {
            if (p1->next->num > p1->next->next->num)    //如果前面的节点键值比后面节点的键值大,则交换
            {
                p2 = p1->next->next;      //结合第1点理解
                p1->next->next = p2->next;      //结合第2点理解
                p2->next = p1->next;     //结合第3点理解
                p1->next = p2;      //结合第4点理解
                p = p1->next->next;    //结合第6点理解
            }
        }
    }

(编辑:PHP编程网 - 湛江站长网)

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

热点阅读