【顺序表】顺序表的就地逆置
编写算法实现顺序表的就地逆置,即利用原顺序表的存储单位把数据元素顺序反向,例如: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++
【顺序表】顺序表的就地逆置相关推荐
- 顺序表创建和就地逆置
顺序表创建和就地逆置 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(Sq ...
- 6-1 顺序表创建和就地逆置 (10 分)
6-1 顺序表创建和就地逆置 (10 分) 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListRe ...
- 数据结构趣题——顺序表就地逆置
利用原表的存储空间将顺序表(a1,a2,--,an)逆置为(an,an-1,---a1). 1: #include <stdio.h> 2: #include <stdlib.h&g ...
- 数据结构:顺序表的就地逆置
顺序表的就地逆置 前言 用于个人作业记录 题目 Chapter 2, HLOJ 9503,例2.6.1 顺序表的就地逆置 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,- ...
- Java顺序表就地逆置_顺序表的就地逆置问题
问题描述:编写一个顺序表的成员函数,实现对顺序表就地逆置的操作.所谓逆置,就是把(a1,a2,a3,...,an)变成(an,an-1,..,a2,a1):所谓就地,即逆置后的数据元素仍在原来顺序表的 ...
- 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
<(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...
- 单链表的应用 就地逆置
[问题描述]试实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,a3....an)逆置为(an...a3,a2,a1). [分析]就地逆置就是不需要额外申请结点空间,只需要利用原 ...
- python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
- 【单链表】单链表的就地逆置
编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...
最新文章
- 计算机控制系统在农业上的应用研究,智能控制仪表系统在农业电气自动化中的应用研究...
- 梦境交互:做个现代灵媒,考虑一下?
- 基于微服务的电商系统架构
- efcore 实体配置_快速掌握EF Core使用技能
- 拯救者Y7000P 2020H款安装deepin20.5后资源空闲时经常出现风扇狂转现象
- JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
- MyBatis下载与简介
- 无法删除文件:无法读源文件或磁盘
- matlab simulink教程pdf,Simulink基础入门教程“完整版”.pdf
- vue+barcode实现扫一扫功能
- [SEEDLabs] Meltdown Spectre Attack Labs
- 【PAT乙级】PAT (Basic Level) Practice (中文)训练记录
- 证件照制作:使用PS打印一寸照片
- debian live-buid
- UiPath 输入对话框
- 惠普Linux系统启动光驱,HP ProLiant MicroServer Gen8使用Super GRUB2 Disk从TF卡启动光驱位安装的Debian 8.3...
- 我用python破解了同事的加密压缩包!
- 从Lync2010看微软UC发展
- SCRM---私域SOP提升私域运营效率和产出效果
- 新媒体人必备数据分析工具|Web Scraper初级用法