博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DS-002 顺序表--逆置所有元素
阅读量:4100 次
发布时间:2019-05-25

本文共 768 字,大约阅读时间需要 2 分钟。

问题.设计一个高效的算法,将顺序表所有元素逆置,要求算法的空间复杂度为O(1)。

算法思想:将第一个元素与最后一个元素互换,第二个元素与倒数第二个元素互换,以此类推。

伪代码:

void Reverse(SqList &L){	ElemType temp; //中间变量	for(i=0; i

解析:

  1. 空间复杂度是O(1)表示算法所需要的辅助空间是常数。
  2. 函数类型void,不返回任何值。函数名Reverse。使用时需要传递顺序表地址作为参数。
  3. L.data表示L中的数据,L.length表示数据的个数。
  4. 直接最后一个元素的值赋给第一个元素,第一个元素的值消失了,两个元素的值相同,不能完成交换。
  5. 不知道顺序表存储的是什么类型的数据,中间变量类型直接ElemType抽象表示。
  6. for循环,从i=0开始计数,如果满足i的值小于顺序表长度的一半,执行花括号的内容,执行完毕后i自增1。继续判断是否满足i的值小于顺序表长度的一半的条件。
  7. temp存放前面元素的值。
  8. 将后面元素的值赋给前面的元素。最初,最后一个元素的值赋给第一个元素。
  9. 数组这里顺序表的下标是从0开始。最后一个元素的下标比数组长度少1。
  10. 如果顺序表长度是奇数,比如9,C语言中9/2保留整数是4。执行到i=3时是最后一次循环,L.data[3] 表示第4个元素的值,L.data[9-3-1]表示第6个元素的值,交换它们。刚好第5个元素的值不用交换。
  11. 如果顺序表长度是偶数,比如8,执行到i=3时是最后一次循环,L.data[3] 表示第4个元素的值,L.data[8-3-1]表示第5个元素的值,交换它们。1和8互换,2和7互换,3和6互换,4和5互换。或者4+5 = 1+8,验证成功。

 

这里&L,给出的参数是L的地址,所以函数内部可以直接对L所在的存储空间进行操作。

转载地址:http://jeeii.baihongyu.com/

你可能感兴趣的文章
FFmpeg学习笔记(二):FFmpeg指令学习
查看>>
Direct3D(D3D)简介
查看>>
DirectX 10 SDK在VS 2010下的安装配置
查看>>
FFmpeg学习笔记(三):逐行扫描转换为隔行扫描的实现----tinterlace简介
查看>>
Matlab运行时出现“Out of Memory”问题,可能的解决办法总结
查看>>
在使用Matlab过程中遇到的问题及其可能的解决办法
查看>>
Matlab中函数fopen、fread、fseek和fwrite的用法
查看>>
SSE指令集学习
查看>>
C++学习笔记(一):打开文件、读取数据、数据定位与数据写入
查看>>
C++学习笔记(二):命名规范
查看>>
C++学习笔记(三)
查看>>
好习惯培养(一):运动!运动!
查看>>
C++学习笔记(四):常用头文件介绍
查看>>
显存、系统内存、AGP内存的概念及特点
查看>>
leetcode top100 面试medium难度
查看>>
浅谈内存泄漏,野指针,内存申请
查看>>
由Python谈及编程语言的分类
查看>>
2 sum, 3 sum, 4sum以及python collections.Counter
查看>>
二叉树的中序遍历,每层遍历,以及Z字形遍历
查看>>
时间复杂度的定义,记号以及几种计算方法
查看>>