编写算法实现顺序表的就地逆置,即利用原顺序表的存储单位把数据元素顺序反向,例如:1,5,6,9,8逆置为 8,9,6,5,1


题目分析:

就地逆置,就是指借用顺序表自身实现顺序逆置,不借助其他线性表。

如果让你口算从1+2+3+4+5+……+99,你会怎么计算呢?很显然,折半加法,将1到99分成两半,1+99=10,2+98 = 100,3+97=100,4+96=100,……,49+51 = 100,50,所以一共49个100,加上最后50,最终答案为4950。

之所以和大家回忆从1加到99这个式子,是因为咱们在就地逆置中会用到这种思想,把第一个数和最后一个数交换位置,第二个数和倒数第二个数交换位置………………那么直到中间就得分情况了

如果顺序表的长度为奇数,那么最后只剩下1个数字,不用做交换,如果是偶数,最后就不会剩下数字,直接完成交换。

那么问题就来了,表长度是奇数还是偶数,对应的算法(结束交换的判断语句)又有着怎样的区别呢?



由上图我们可以知道,不论表的长度length是偶还是奇,我们都只循环了length/2次,因此长度为奇和偶都一样


代码实现:

#include
const int MAX = 20;     //设定这个顺序表的最大空间为20,也就是最多可以存20个int数
typedef int dataType;   //数据类型为int型
typedef struct seqlist
{dataType a[MAX];             //声明这条顺序表存储数据的工具————数组(一段连续的地址空间,所以我们称这种方式为顺序存储)int size;                    //数据元素个数
}SeqList;
//初始化顺序表
void listInitiate(SeqList *seqlist)
{seqlist->size = 0;           //刚创建顺序表之后的数据个数为0
}
//往顺序表中放10个数
void listOriginal(SeqList *seqlist)
{for (int i = 0; i < 10; i++){seqlist->a[i] = i*4;seqlist->size++;         //多了一个数据元素,所以size得+1;}
}
//将顺序表逆置
SeqList* listReserve(SeqList* seqlist)
{int t;for (int i = 0; i < seqlist->size / 2; i++){t = seqlist->a[i];seqlist->a[i] = seqlist->a[seqlist->size - 1 - i];seqlist->a[seqlist->size - 1 - i] = t;}return seqlist;
}
//专门用来遍历输出的函数
void listPrint(SeqList *seqlist)
{printf("顺序表:");for (int i = 0; i < seqlist->size; i++)printf("%d  ", seqlist->a[i]);printf("\n");
}
int main()
{SeqList seqlist;      //定义两条顺序表printf("长度为奇数时:\n");listInitiate(&seqlist);        //初始化listOriginal(&seqlist);        //往链表里面放十个数listPrint(&seqlist);           //输出原顺序表printf("就地逆置后的");listReserve(&seqlist);         //逆置顺序表listPrint(&seqlist);           //输出逆置后的顺序表printf("\n长度为偶数时:\n");seqlist.a[seqlist.size++] = -1;//往顺序表尾添加一个数据,使之长度变成偶数listPrint(&seqlist);printf("就地逆置后的");listReserve(&seqlist);listPrint(&seqlist);return 0;
}[/prism]

运行结果:


代码编译器:Dev-C++

【顺序表】顺序表的就地逆置相关推荐

  1. 顺序表创建和就地逆置

    顺序表创建和就地逆置 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(Sq ...

  2. 6-1 顺序表创建和就地逆置 (10 分)

    6-1 顺序表创建和就地逆置 (10 分) 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListRe ...

  3. 数据结构趣题——顺序表就地逆置

    利用原表的存储空间将顺序表(a1,a2,--,an)逆置为(an,an-1,---a1). 1: #include <stdio.h> 2: #include <stdlib.h&g ...

  4. 数据结构:顺序表的就地逆置

    顺序表的就地逆置 前言 用于个人作业记录 题目 Chapter 2, HLOJ 9503,例2.6.1 顺序表的就地逆置 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,- ...

  5. Java顺序表就地逆置_顺序表的就地逆置问题

    问题描述:编写一个顺序表的成员函数,实现对顺序表就地逆置的操作.所谓逆置,就是把(a1,a2,a3,...,an)变成(an,an-1,..,a2,a1):所谓就地,即逆置后的数据元素仍在原来顺序表的 ...

  6. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  7. 单链表的应用 就地逆置

    [问题描述]试实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,a3....an)逆置为(an...a3,a2,a1).    [分析]就地逆置就是不需要额外申请结点空间,只需要利用原 ...

  8. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

  9. 【单链表】单链表的就地逆置

    编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...

最新文章

  1. 计算机控制系统在农业上的应用研究,智能控制仪表系统在农业电气自动化中的应用研究...
  2. 梦境交互:做个现代灵媒,考虑一下?
  3. 基于微服务的电商系统架构
  4. efcore 实体配置_快速掌握EF Core使用技能
  5. 拯救者Y7000P 2020H款安装deepin20.5后资源空闲时经常出现风扇狂转现象
  6. JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
  7. MyBatis下载与简介
  8. 无法删除文件:无法读源文件或磁盘
  9. matlab simulink教程pdf,Simulink基础入门教程“完整版”.pdf
  10. vue+barcode实现扫一扫功能
  11. [SEEDLabs] Meltdown Spectre Attack Labs
  12. 【PAT乙级】PAT (Basic Level) Practice (中文)训练记录
  13. 证件照制作:使用PS打印一寸照片
  14. debian live-buid
  15. UiPath 输入对话框
  16. 惠普Linux系统启动光驱,HP ProLiant MicroServer Gen8使用Super GRUB2 Disk从TF卡启动光驱位安装的Debian 8.3...
  17. 我用python破解了同事的加密压缩包!
  18. 从Lync2010看微软UC发展
  19. SCRM---私域SOP提升私域运营效率和产出效果
  20. 新媒体人必备数据分析工具|Web Scraper初级用法

热门文章

  1. 什么是精灵图?如何使用精灵图
  2. CANopen总线的协议详解
  3. 使用抽象类阻止实例化
  4. Udesk作为国内SaaS客户服务领域的翘楚,将对标海外巨头Oracle丨Xtecher 封面
  5. onkeypress、onkeydown、onkeyup
  6. 联想电脑去掉开机广告 关闭开机广告 ideapad 去掉开机广告
  7. 杨辉三角寄数列求和c语言,杨辉三角与高阶等差数列的求和
  8. Python之建模规划篇--整数规划
  9. 一种简单的抽签/抽奖算法逻辑
  10. Mesosphere DCOS安装