【数据结构与算法分析】反转链表与顺序表(内含源码,思路清晰)

文章目录

  • 介绍
  • 实现顺序表反转
  • 实现链表反转
  • 附链表的一些中间函数

介绍

  顺序表和链表都是数据结构中常见的线性表。它们的主要区别在于内存管理方式不同
  顺序表(Array)是由一系列元素按照一定顺序依次排列而成,它使用连续的内存空间存储数据。顺序表使用一个数组来存储数据,数组中的每个元素都可以通过下标来访问。顺序表具有随机访问、空间利用率高等优点,但在插入和删除元素时需要移动其他元素,导致效率低下。在需要频繁修改元素的情况下,顺序表不适合使用。
  链表(List)是一种通过指针来实现的动态数据结构,可以无序存储任意类型的数据。链表中的元素被称为节点,每个节点中都包含了数据和指向下一个节点的指针。相比之下,链表的内存分配是动态的,并且不需要提前规划数组大小,能够有效地避免内存浪费。链表可以快速地插入和删除节点,但是由于插入和删除必须先定位到指定位置,因此其访问时间比顺序表长。
  总之,当需要频繁查询顺序、频繁访问内部元素和使用预定义的固定大小存储数据时,使用顺序表可能是比较合适的选择。但当需要大量插入、删除和更改元素和无法提前预测空间大小时,链表的动态分配方式更为有效。

实现顺序表反转

/***************************************
* 函数功能:逆置顺序表
* 函数参数:int*data-表示待逆置的顺序表 int size-表示顺序表的大小
* 函数返回值:无
****************************************/
void reverse(int*data, int size)
{for (int i = 0; i < size / 2; ++i){int temp = data[i];data[i] = data[size - i - 1];data[size - i - 1] = temp;}
}

  在函数体中,发生了一次 for 循环,该循环的次数与数据规模 N 成线性关系。另外,for 循环中进行了常数次的赋值操作。因此,整个函数的时间复杂度是 O(N)。(其中N表示顺序表的长度)
  该函数的空间复杂度为 O(1)(常数级别)。在函数执行期间,只使用了恒定数量的变量(i、temp),而且使用的空间不随问题规模 N 的增加而增加,因此该函数的空间复杂度为 O(1)。
  因此,该函数的时间复杂度为 O(N),空间复杂度为 O(1)。

实现链表反转

核心代码

/***************************************
* 函数功能:逆置链表
* 函数参数:struct myHead* list待逆置链表
* 函数返回值:无
****************************************/
void reverseList(struct myHead* list)
{struct myNode*p = list->element->next,*q = NULL;// 遍历链表while (p){// 保存p的后继节点struct myNode*temp = p->next;// 改变指针指向的位置p->next = q;q = p;p = temp;}// 保存反转链表的结果list->element->next = q;
}

  算法的核心设计思想:改变链表中节点指针指向的位置,也就是改变前驱与后继元素的位置。
  若链表中的元素为1、2、3、4、5那么反转的过程图如下:
在这里插入图片描述

  该函数主要有两个操作:遍历链表和反转链表。在遍历链表过程中,需要访问、操作每个节点以及节点中存储的数据。因此,函数的时间复杂度为 O(N)。(其中 N 表示链表长度)
  函数的空间复杂度为 O(1)。函数只使用了常数级别的额外空间来存储一些临时变量,而且这些变量的空间占用与问题规模 N 无关,因此可以认为函数的空间复杂度为 O(1)。

附链表的一些中间函数

  链表的结构

struct myNode
{int data;struct myNode*next;
};struct myHead
{int size;struct myNode*element;
};

  链表的一些基本操作,包括初始化、添加节点与输出链表。


/***************************************
* 函数功能:链表初始化
* 函数参数:无
* 函数返回值:无
****************************************/ 
struct myHead*listInit(void)
{// 初始化头结点struct myHead*myList = (struct myHead*)malloc(sizeof(struct myHead));myList->size = 0;// 添加虚拟节点myList->element = (struct myNode*)malloc(sizeof(struct myNode));myList->element->data = -1;myList->element->next = NULL;return myList;
}/***************************************
* 函数功能:使用尾插法插入值至链表中
* 函数参数:struct myHead*list表示目标链表 int data表示待插入的值
* 函数返回值:无
****************************************/
void addNode(struct myHead*list, int data)
{struct myNode*p = list->element;// 遍历至待插入节点的前驱节点while (p->next)p = p->next;// 新建节点struct myNode*myNode = (struct myNode*)malloc(sizeof(struct myNode));myNode->data = data;myNode->next = NULL;// 插入节点并增加链表节点数量p->next = myNode;list->size++;
}/***************************************
* 函数功能:输出链表
* 函数参数:struct myHead* list待输出链表
* 函数返回值:无
****************************************/
void outPutList(struct myHead* list)
{struct myNode *p = list->element->next;while (p){printf("%d ",p->data);p = p->next;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

怎样关闭百度云开机启动服务器,教你解决win10系统设置百度云管家开机自动启动的设置办法...

许多win10系统用户在工作中经常会遇到对win10系统设置百度云管家开机自动启动的设置方法&#xff0c;想必大家都遇到过需要对win10系统设置百度云管家开机自动启动进行设置的情况吧&#xff0c;那么应该怎么设置win10系统设置百度云管家开机自动启动的操作方法非常简单&#xf…

Windows电脑怎么解决百度云管家无法删除也无法打开的问题(臭流氓软件)

实习第一天有的东西需要从百度云上面下载&#xff0c;谁知道直接先给我下载了一个百度云管家&#xff0c;我&#xff1a;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 然后发现还删除不了&#xff0c;哼&#xff0c;难不倒我。 直接打开任务管理器&#xff0c;找了很久…

如何清除百度云管家计算机图标,Win10此电脑中多了个百度云管家图标如何清除...

百度云管家是百度云的客户端&#xff0c;一些用户为了更加方便地上传下载文件&#xff0c;都会在电脑中安装百度云管家。但是最近有Win10用户反馈&#xff0c;安装了百度云管家后&#xff0c;此电脑中就多了“百度云管家”的图标&#xff0c;怎么删也删不掉&#xff0c;这该怎么…

百度云管家在计算机上删除,百度云管家盘符删不掉怎么办?删除百度云管家盘符的方法...

选择很多的人都喜欢使用百度云盘来进行文件或者的资料的存放&#xff0c;为的就是在其它的地方也能将文件或资料实施开启&#xff0c;就不用再使用硬盘或者是U盘来进行携带&#xff0c;这样不仅减少了很多不必要的麻烦&#xff0c;而且还简单轻松。然我们在使用百度云盘的时候&…

百度云管家下载速度也作假

以前写过一篇&#xff0c;百度云上传流量造假的&#xff1a;点这里 现在根据目前的检测发现&#xff1a;百度云在下载的时候速度造假&#xff0c;大文件测试的结果是&#xff1a;下载造假20%&#xff0c;即用100M的流量实际上只能下载80M的文件 对于按流量计费的小伙伴们&…

百度云管家开机启动如何取消

http://jingyan.baidu.com/article/c85b7a6404edde003bac95ce.html 度云管家在下载方面越来越有吸引力&#xff0c;但是对于大多数朋友来说&#xff0c;并没有需求到每次开机都要使用百度云管家的地步。那么怎么取消百度云管家的开机启动呢&#xff1f; 工具/原料 百度云管家 方…

百度云管家怎么用

百度云管家是百度公司旗下的一款软件&#xff0c;它主要被应用鱼下载功能上&#xff0c;支持断点续传&#xff0c;那么如何用呢。 方法/步骤 1 先从百度网站中搜索这个软件安装。点击推荐安装。 2 安装完毕后&#xff0c;点击体验下。这里提示输入百度HI的 ID&#xff0c; 3 这…

百度云管家 v 5.5.0 破解安装版

12月7日亲测有效&#xff01;用此破解版俺的百度云管家下载软件破纪录了 &#xff0c;欢迎大家试试。。。 如下载速度慢的话&#xff0c;可以先暂停再开始。 http://pan.baidu.com/s/1gffucan 转载于:https://blog.51cto.com/haiyang457/1880251

User agent switcher插件百度云盘不用百度云管家下载大文件

百度云盘现在很烦人啊&#xff0c;一个几M的小文件都要百度云管家才能下&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 以前在知乎上看到的一个方法&#xff08;现在找不到在哪了&#xff09;&#xff0c;用User agent switcher插件可以完美解决 火狐附加组件…

如何清除百度云管家计算机图标,怎么样删除我的电脑里的百度云管家图标

怎么样删除我的电脑里的百度云管家图标&#xff1f;相信对于不少朋友&#xff0c;网盘已经成为我们不可缺少的一部分&#xff0c;可以这么说&#xff0c;我们很爱它&#xff0c;但是由于各种各样的强制安装&#xff0c;就会有了计算机里面的网盘盘符&#xff0c;有些人喜欢这种…

C盘今天爆掉了,罪魁祸首--百度云管家

引起注意以后,慢慢查找元凶 发现:C:\Users\lenovo\AppData\Roaming 竟然全在这里,很无语 打开看看吧: 包含Config 和Data 两个文件夹 其中Data文件夹竟然占据四十多个G 里面竟然有五千多个日志文件: 无语了 上网查了下发现: C:\Users\你的用户名\AppData\Roaming\BaiduYu…

2023年前端面试题汇总-数据结构(链表)

1. 链表的概念 1.1. 链表的结构 在计算机里&#xff0c;不保存在连续存储空间中&#xff0c;而每一个元素里都保存了到下一个元素的地址的数据结构&#xff0c;我们称之为链表&#xff08;Linked List&#xff09;。链表上的每一个元素又可以称它为节点&#xff08;Node&…

Unity立方体六个面不同贴图

可用Unity官方材质&#xff1a;skybox下的Cubemap&#xff1a; 但是&#xff0c;有些面没有渲染上&#xff1a; 原因在于官方Shader里面的Cull off&#xff0c;将其改为Cull back就好了&#xff0c;或者ZWrite Off改为ZWrite On。附上代码&#xff1a; Shader "Custom…

Galgame研发日志:预算爆炸,问题不大

很多独立游戏制作路上遇到的问题&#xff0c;说到底就是钱的事儿&#xff0c;之所以这些问题成为问题&#xff0c;原因多半是没钱&#xff0c;今天就来谈谈关于游戏制作当中找钱和用钱的事儿。刚开始gal制作的事情&#xff0c;我初步定了一个40万的预算&#xff0c;不算高&…

轻音乐集锦

我相信好的轻音乐能修身养性&#xff0c;对人的性格塑造影响比较大的。本人这几年收集了一些轻音乐&#xff0c;在这里分享一下。我下面介绍的曲子会有少量背景音乐、电影插曲、新世纪音乐、还有一些钢琴曲。分类比较粗糙&#xff0c;希望能耐心看完。这些音乐的特点都是轻柔的…

FProject_《galgame engine》篇

原项目日志(已荒废):http://hi.baidu.com/new/gal123 FProject&#xff1a;http://dl.vmall.com/c0xxq2qowq 全版本下载&#xff08;目录&#xff0c;可选&#xff09;&#xff1a;http://dl.vmall.com/c0dd1sq75l FSC&#xff08;最近无聊写的&#xff09;&#xff1a;命令行下…

springBoot+mybatisPlus+springMvc+activiti6整合 Eclipse

因为工作需要以及为了自己后来搭建起来方便来做个笔记 如有问题欢迎指出 首先创建springBoot项目 1插件安装 因为spring官方提供了STS这个插件可以方便的进行springBoot项目的开发&#xff0c;所以先安装STS插件。 打开Eclipse选择 Help/EclipseMarketspace 打开插件市场&am…

HTML+CSS大作业——动画漫展学习资料电影模板(6页) 网页设计作业 _ 动漫网页设计作业,网页设计作业 _ 动漫网页设计成品,网页设计作业 _ 动漫网页设计成品模板下载

HTML5期末大作业&#xff1a;动漫 文章目录 HTML5期末大作业&#xff1a;动漫一、作品展示二、文件目录三、代码实现 一、作品展示 二、文件目录 三、代码实现 <!DOCTYPE html><head><meta charset"UTF-8" /><meta http-equiv"Content-Typ…

HTML5期末大作业:动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 / 动漫网页设计作业,网页设计作业 / 动漫网页设计成品,网页设计作业 / 动漫网页设计成品模板下载

HTML5期末大作业&#xff1a;动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 / 动漫网页设计作业,网页设计作业 / 动漫网页设计成品,网页设计作业 / 动漫网页设计成品模板下载 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、…

HTML5期末大作业:动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 _ 动漫网页设计作业,网页设计作业 _ 动漫网页设计成品,网页设计作业 _ 动漫网页设计成品模板下载

HTML5期末大作业&#xff1a;动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 / 动漫网页设计作业,网页设计作业 / 动漫网页设计成品,网页设计作业 / 动漫网页设计成品模板下载 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、…