综合应用题——线性表的链式表示(每日更新中...)

一、练习题

01题

在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。

【解法1】用p从头至尾扫描单链表,pre指向*p结点的前驱。若p所指结点的值为x,则删除,并让p移向下一个结点,否则让pre、p指针同步后移一个结点。

void Del_X_1(Linklist &L,ElemType x){
    LNode *p=L->next,*pre=L,*q;//置p和pre的初始值
    while(p!=NULL){
        if(p->data==x){
            q=p;               //q指向被删结点
            p=p->next;
            pre->next=p;       //将*q结点从链表中断开;
            free(q);           //释放*q结点的空间
         }
         else{                 //否则,pre和p同步后移
             pre=p;
             p=p->next;
         }//else
     }//while
}

本算法是在无序单链表中删除满足某种条件的所有结点,条件是结点的值为x。条件是可以任意指定的,只要修改if条件即可。比如,要求删除介于mink和maxk之间的所有结点,只需将if语句修改为if(p->data>mink&&p->data->maxk)。

【解法2】采用尾插法建立单链表。用p指针扫描L的所有结点,当其值不为x时,将其链接到L之后,否则将其释放。

void Del_X_2(Linklist &L,ElemType x){
    LNode *p=L->next,*r=L,*q;    //r指向尾结点,其初值为头结点
    while(p!=NULL){
        if(p->data!=x){          //*p结点值不为x时将其链接到L尾部
            r->next=p;
            r=p;
            p=p->next;           //继续扫描
         }
         else{                   //*p结点值为x时将其释放
            q=p;
            p=p->next;           //继续扫描
            free(q);             //释放空间
         }
     }//while
     r->next=NULL;               //插入结束后置尾结点指针为NULL
}

上述两个算法扫描一遍链表,时间复杂度为O(n),空间复杂度为O(1)。

二、统考真题

【2019年统考真题】

设线性表L=({a_{1},a_{2},a_{3},...,a_{n-2},a_{n-1},a_{n}})采用带头结点的单链表保存,链表中的结点定义如下:

typedef struct node
{    int data;
     struct node*next;
}NODE;

 请设计一个空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表L'=(a_{1},a_{n},a_{2},a_{n-1},a_{3},a_{n-2},...)。要求:

1)给出算法的基本设计思想。

2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。

3)说明你所设计的算法的时间复杂度。

【解答】

1)算法的基本设计思想

先观察L=({a_{1},a_{2},a_{3},...,a_{n-2},a_{n-1},a_{n}})L'=(a_{1},a_{n},a_{2},a_{n-1},a_{3},a_{n-2},...),发现L'是由L摘取第一个元素元素,再摘取倒数第一个元素......依次合并而成的。为方便链表后半段取元素,需要将L后半段原地逆置[题目要求空间复杂度为O(1),不能借助栈],否则每取最后一个结点都需要遍历一次链表。a.先找出链表L的中间结点,为此设置两个指针p和q,指针p每次走一步,指针q每次走两步,当指针q到达链尾时,指针p正好在链表的中间结点;b.然后将L的后半段结点原地逆置;c.从单链表前后两段中依次各取一个结点,按要求重排。

2)算法实现

void change_list(NODE*h){
    NODE *p,*q,*r,*s;
    p=q=h;
    while(q->next!=NULL){            //寻找中间结点
        p=p->next;                   //p走一步
        q=q->next;
        if(q->next!=NULL) q=q->next; //q走两步
    }
    q=p->next;                       //p所指结点为中间结点,q为后半段链表的首结点
    p->next=NULL;
    while(q!=NULL){                  //将链表后半段逆置
        r=q->next;
        q->next=p->next;
        p->next=q;
        q=r;
    }
    s=h->next;                       //s指向前半段的第一个数据结点,即插入点
    q=p->next;                       //q指向后半段的第一个数据结点
    p->next=NULL;
    while(q!=NULL){                  //将链表后半段的结点插入到指定位置
        r=q->next;                   //r指向后半段的下一个结点
        q->next=s-next;              //将q所指结点插入到s所指结点之后
        s-next=q;
        s=q->next;                   //s指向前半段的下一个插入点
        q=r;
    }
}

3)第一步找中间结点的时间复杂度为O(n),第二步逆置的时间复杂度为O(n),第三步合并链表的时间复杂度为O(n),所以算法的时间复杂度为O(n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/471956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【堆、位运算、数学】算法例题

目录 十九、堆 121. 数组中的第K个最大元素 ② 122. IPO ③ 123. 查找和最小的K对数字 ② 124. 数据流的中位数 ③ 二十、位运算 125. 二进制求和 ① 126. 颠倒二进制位 ① 127. 位1的个数 ① 128. 只出现一次的数字 ① 129. 只出现一次的数字 II ② 130. 数字范围…

MATLAB:函数与数值积分

一、数学函数图像的绘制 clc,clear fh (x)2*exp(-x).*sin(x); Xrange [0,8]; gx (x)3*exp(-x)*0.8.*sin(x); fplot(fh,Xrange,r-*,LineWidth,1.5) hold on grid on fplot(gx,Xrange,b-o,LineWidth,1.5) axis([-0.5,8.5,-0.1,0.85]) legend(fh (x)2*exp(-x).*sin(x),gx (x…

【笔记】用三角函数拟合数据(最小二乘法)

0.Matlab自带函数拟合 用三角函数拟合数据简单方便,matlab自带的fittype函数即可完成拟合任务,但是fittype函数仅限于matlab,为了搞懂fittype函数的内含,自己写了一套函数用于拟合。 如下图所示,现有一不规则散点,命令用三角函数拟合,拟合的目标频率w0为0.01m^-1 拟合…

模型部署——RKNN模型量化精度分析及混合量化提高精度

模型部署——RKNN模型量化精度分析及混合量化提高精度(附代码)-CSDN博客 3.1 量化精度分析流程 计算不同情况下,同一层网络输入值的余弦距离,来近似的查看每一层精度损失的情况。具体量化精度分析的流程如下: 3.2 量…

闪存盘上被删除的文件能被回收站恢复吗?

随着数字设备的普及,闪存盘作为一种便携式的存储设备,已经深入到了我们的日常生活和工作中。然而,在使用闪存盘的过程中,我们可能会不小心删除一些重要的文件。这时,很多人会寄希望于回收站来恢复这些文件。但是&#…

Flutter开发入门——路由

什么是路由? 移动端应用开发中,路由技术是一个非常重要的组成部分。路由技术负责管理应用中各个页面之间的跳转、导航以及参数传递等关键功能。在移动端应用中,一个高效、易于维护的路由系统对于提高开发效率和用户体验具有重要意义。 Flut…

基于Java中的SSM框架实现医院院内物资管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现医院院内物资管理系统演示 摘要 在当今的中国改革开放经济体制下,中国经济正以快速稳健的步伐前行。并且随着经济的发展,各领域的信息化管理也得到了充足的发展,而且愈发普及。现如今,几乎所有的行业中都…

机器学习_自我总结

文章目录 简介优化算法的方法诊断偏差和方差 简介 我只是一个小白,很多东西写不好,也不是很懂只是记一下笔记对自己的映像更深,也希望有人能够指导我学习(谢谢!) 优化算法的方法 (1)修改学习速率,还有各种(可变)参数1.尝试减少特征的数量2.尝试获得更多的特征3.尝试增加多项…

elment-ui el-tabs组件 每次点击后 created方法都会执行2次

先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展,我们正逐渐步入数字化智能时代,这个时代不仅为企业带来了无限的机遇,也让其面对前所未有的挑战。在这个快速变革的时代,企业必须不断调整自己的经营策略,适应数字化转型的浪潮,以…

SQL-Labs靶场“32-33”关通关教程

君衍. 一、32关 GET单引号闭合宽字节注入1、源码分析2、宽字节注入原理3、联合查询注入4、updatexml报错注入5、floor报错注入 二、33关 GET单引号addslashes逃逸注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程: SQL注入…

【Linux】多线程 --- 同步+POSIX信号量+基于环形队列的生产者消费者模型

线程同步 1. 通过条件变量抛出线程同步概念 在上一篇线程互斥博客就说过,在抢票逻辑中,刚释放完锁的线程由于竞争能力比较强,导致其他线程无法申请到锁,那么长时间其他线程都无法申请到锁,只能阻塞等待着&#xff0c…

福克斯2010 1.8L 手动档

老车了记录点东西 好看也便宜 福克斯维修保养费用调查_保养维护_车系文章_空港平行进口汽车交易服务中心 https://tjautoland.net/article-40.html 福克斯自从上市后,凭借其时尚动感的外形、良好的操控性和极佳的驾乘舒适度,在国内紧凑型市场上持续热…

HJDZ-E800静态中间继电器 DC24V 35mm卡导轨安装 JOSEF约瑟

HJDZ静态中间继电器 系列型号: HJDZ-A200静态中间继电器;HJDZ-A110静态中间继电器; HJDZ-A002静态中间继电器;HJDZ-A004静态中间继电器; HJDZ-E112静态中间继电器;HJDZ-E112L静态中间继电器; HJ…

一步将查询功能添加到公众号菜单和文章

易查分如何将查询功能添加到公众号菜单和文章,实现菜单栏、文章、自动回复均可进行查询。本文给大家详细讲解。 🔎接入方式: ✅1.公众号菜单栏接入查询网址 ✅2.公众号菜单栏接入查询小程序 ✅3.公众号菜单栏点击发送查询二维码 ✅4.公众…

提升口才与演讲技巧的有效方法

提升口才与演讲技巧的有效方法 口才与演讲技巧在现代社会中扮演着举足轻重的角色。无论是在职场、学校还是日常生活中,我们都需要借助良好的口才和演讲技巧来表达自己的思想,传递信息,并有效地影响他人。因此,提升口才与演讲技巧…

02分布式搜索引擎ES

elasticsearch查询 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.3.精准查询1.4.地理坐标查询1.5.复合查询 2.搜索结果处理2.1.排序2.2.分页2.3.高亮2.4.总结 3.RestClient查询文档3.1.快速入门3.2.match查询3.3.精确查询3.4.布尔查询3.5.排序、分页3.6.高亮 1.DSL查询文档 …

HTML中的常用标签用法总结(持续更新...)

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 1. 标题标签2. 段落标签3. 链接标签4. 列表标签5. 图像标签6. 表格标签 1. 标题标签 <h1>至<h6>用于定义标题。<h1>是最大的标题&am…

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型

往期精彩内容&#xff1a; 电能质量扰动信号数据介绍与分类-Python实现-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer…

一款博客网站源码

一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码&#xff0c;该版本为整合版本&#xff0c;内置了Joe主题&#xff0c;搭建后直接启用即可~ 安装环境要求&#xff1a; PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff…
最新文章