数据结构题:由逆置数组方法——逆置线性表L的所有元素

简介: 数据结构题:由逆置数组方法——逆置线性表L的所有元素

前言


文章代码皆经Dev-C++ 5.11中测试无误,若有代码错误或表述不当,欢迎指正!


题目


输入一个数组,要求对该数组进行逆序然后输出。


当我们想对一个数组的所有元素进行逆置时,可以通过for()循环,每次进行二分(这里的二分是对数组的长度进行),使每次数组的最左边和最右边的两个元素进行交换从而实现逆置,即将数组的长度/2,即当数组的长度为奇数时,剩下的那个元素不用逆置(因为它位于所以元素的中心,即使逆序也不变),而当数组的长度为偶数时,逆置的元素刚好每次交换两个,如下代码:

#include<stdio.h>
int main() {
  int s,i,a,temp,length;
  int array[length];
  printf("请输入数组的长度:\n");
  scanf("%d",&length);
  for(s=0; s<length; s++) {
  printf("请输入数组array[%d]的值:\n",s);
  scanf("%d",&array[s]);
  }
  printf("输出当前数组元素:\n");
  for(a=0; a<length; a++)
  printf("%d ",array[a]);
  printf("\n");
  for(i=0; i<length/2; i++) {
  temp=array[i];
  array[i]=array[length-i-1];
  array[length-i-1]=temp;
  }
  printf("逆序输出数组元素:\n");
  for(a=0; a<length; a++)
  printf("%d ",array[a]);
  return 0;
}


运行结果如下,例如输入一个数组长度为5,array={4,9,0,2,7}:

1667189590624.jpg


【王道•数据结构】 例、设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。


其实这道题,可以按照逆置数组的方法来完成逆置顺序表L,因为它也是由数组组成的,关键部分为:

1667189615855.jpg

定义顺序表结构体:

#define MaxSize 50
typedef struct{
  int data[MaxSize];
  int length;
}SqList;

首先对顺序表L进行/2,将L中前半元素与后半元素进行交换,也就是交换L.data[i]和L.data[L.length-i-1],由于是考研所以只需写相对应实现的函数,且要求它的空间复杂度为O(1),代码如下:

void Reverse(SqList &L) {
  int temp,i;  //temp作为临时变量
  for(i=0; i<L.length/2; i++) {  //交换L.data[i]和L.data[L.length-i-1]
  temp=L.data[i];
  L.data[i]=L.data[L.length-i-1];
  L.data[L.length-i-1]=temp;
  }


相关文章
|
2月前
|
C++
数据结构01-线性结构-链表栈队列-栈篇
数据结构01-线性结构-链表栈队列-栈篇
|
1月前
|
存储 C语言
数据结构中的线性表链式存储介绍及其基本操作
链式存储是线性表的一种重要存储方式,它通过节点和指针的结构,实现了灵活的动态存储管理。本文介绍了单向链表的基本操作,并提供了相应的C语言代码示例。理解和掌握链表的操作对学习和应用数据结构具有重要意义。希望这篇博客能帮助你更好地理解线性表的链式存储。
37 2
|
1月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
16 0
|
2月前
|
机器学习/深度学习 算法 测试技术
【单调栈】3113. 边界元素是最大值的子数组数目
【单调栈】3113. 边界元素是最大值的子数组数目
|
6天前
【数据结构OJ题】移除链表元素
力扣题目——移除链表元素
11 2
【数据结构OJ题】移除链表元素
|
8天前
|
算法
【数据结构OJ题】移除元素
力扣题目——移除元素
14 1
【数据结构OJ题】移除元素
|
1月前
|
存储
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
16 2
|
1月前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
41 1
|
20天前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
21天前
|
存储 算法 Java
Java数据结构与算法:线性数据结构之数组
Java数据结构与算法:线性数据结构之数组