顺序表的逆置

news/2024/7/3 4:59:24

1.内容:

   用顺序表作为存储结构,实现将线性表就地逆置的操作,所谓“就地”,指辅助空间应为O(1)。

2.算法分析

利用顺序表实现线性表就地逆置操作,其基本思想为将顺序表的第一个元素与最后一个元素进行互换,将第二个元素与顺序表的倒数第二个元素进行互换……以此类推,便可将顺序表中的所有元素进行逆置操作,当顺序表中的元素个数为偶数时,则两两互换之后刚好,不会遗留单独元素,但当顺序表中的元素为奇数时,两两互换之后剩下最中间的元素,则需要添加一个元素使其变成偶数。3.概要设计

使用C语言,其中设置了以下函数

 程序运行流程图如下:

 

4.测试(设计测试用例或测试代码的设计与实现,测试结果截屏)

测试用例涵盖:正确输入数据,输入数据超出最大空间等问题,提供较多测试用例,保证测试效果。

结果截图:

 附源码如下:

#include<stdio.h>
const int MAX = 50;     //设顺序表的最大存储空间为50
typedef int dataType;   //数据类型为int型
typedef struct seqlist {
	dataType a[MAX];             //利用数组存储数据类型
	int size;                    //定义数据元素个数
} SeqList;
//初始化顺序表
void listInitiate(SeqList *seqlist) {
	seqlist->size = 0;           //新的顺序表创建后数据元素为0
}
//向顺序表里存储十个数据并定义数据的循环条件
void listOriginal(SeqList *seqlist) {
	for (int i = 0; i < 10; i++) {
		seqlist->a[i] = i*3;
		seqlist->size++;
	}
}
//顺序表逆置
SeqList* listReserve(SeqList* seqlist) {
	int temp;
	for (int i = 0; i < seqlist->size / 2; i++) {
		temp = seqlist->a[i];
		seqlist->a[i] = seqlist->a[seqlist->size - 1 - i];
		seqlist->a[seqlist->size - 1 - i] = temp;
	}
	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;
}


http://www.niftyadmin.cn/n/2249229.html

相关文章

小巧的HTTP Server[C语言]

2019独角兽企业重金招聘Python工程师标准>>> 六款小巧的HTTP Server[C语言] 1、micro_httpd - really small HTTP server 特点&#xff1a; 支持安全的 .. 上级目录过滤 支持通用的MIME类型 支持简单的目录 支持目录列表 支持使用 index.html 作…

有技术也有趋势,2017百度云智峰会免费参会邀约

9 月 2 日&#xff0c;期待已久的第二届百度云智峰会即将开幕&#xff0c;本届峰会依然以人工智能、大数据和云计算为主旋律。不过&#xff0c;不同于往届概念性的阐述和展望&#xff0c;今年峰会似乎更加注重“实践”与“融合”&#xff0c;大会着力强调“Innovation”&#x…

线性链表的分割

1.内容:已知一个线性链表表示的线性表中含有三类字符的数据元素&#xff08;如字母字符&#xff0c;数字字符和其它字符&#xff09;&#xff0c;试编写算法将该线性链表分割为三个循环链表&#xff0c;其中每个循环链表表示的线性表中均只含有一类字符。 2.算法分析 首先建立…

十进制整数转换为任意进制数

内容: 将十进制整数num转换为r进制数&#xff0c;其转换方法为辗转相除法。要求用链栈实现。 步骤&#xff1a; 算法分析 本题需要将十进制整数num转换为任意进制数&#xff0c;要求使用链栈实现转换。程序中设计了四个函数&#xff0c;(1)函数InitStack()用来初始化一个顺序…

scala 编译机制 反编译案例

目录scala底层的编译机制源码类反编译class文件得到的demo01_test反编译class文件得到的demo01_test$反编译class文件得到的Workerscala底层的编译机制 源码类 package com.xcu.chapter06object demo01_test {def main(args: Array[String]): Unit {var worker new Worker…

回溯算法之八皇后问题

内容: 皇后问题是一个古老而著名的问题&#xff0c;是回溯算法的典型问题&#xff0c;该问题是19世纪著名的数学家高斯于1850年提出的&#xff1a; 在8*8格的国际象棋棋盘上&#xff0c;安放八个皇后&#xff0c;要求没有一个皇后能够“吃掉”任何其他一个皇后&#xff0c;即…

ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】

版权声明&#xff1a;本文为HaiyuKing原创文章&#xff0c;转载请注明出处&#xff01; 前言 简单封装网络请求时的加载对话框以及上传、下载文件的进度加载对话框。 效果图 代码分析 ProgressWheel &#xff1a; 自定义view&#xff0c;仿Material Design样式 ProgressWheelDi…

判断一个字符串是否为回文序列

内容: 回文是指正读反读均相同的字符序列&#xff0c;如"abba"和"abdba"均是回文&#xff0c;但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。 步骤&#xff1a; 算法分析 本算法利用数组和栈实现&#xff0c;其主要思路为将从…