博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换(数据结构OJ练习)(样例4553 WA)
阅读量:2338 次
发布时间:2019-05-10

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

顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

问题描述

目的:使用STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。

应用1:试设计一个算法,用尽可能少的辅助空间将顺序表中前 m 个元素和后 n 个元素进行互换,即将线性表(a1,a2,…,am,b1,b2,…,bn) 改变成(b1,b2,…,bn,a1,a2,…,am)。

参考函数原型:template

void Exchange( vector &A,int m );// 本算法实现顺序表中前 m 个元素和后 n 个元素的互换

输入说明

第一行:待处理顺序表的长度

第二行:待处理顺序表的数据元素(数据元素之间以空格分隔)

第三行:逆置位置m

输出说明

第一行:待处理顺序表的遍历结果

第二行:逆置结果

输入范例

1013 5 27 9 32 123 76 98 54 875

输出范例

13 5 27 9 32 123 76 98 54 87 123 76 98 54 87 13 5 27 9 32

思路分析

  • 尽可能少的辅助空间,就以为者要用最少的空间复杂度去实现,不能创建大量的元素
  • 最简单的方法就是设置一个元素,进行交换。
  • 一个次反转,为原序的逆序,然后再反转,就是原序

伪代码

void realExchange(vector
&A,int left,int right){
//swap reverse the element between left and right Elemtype temp; while(left <= eight) {
temp = A[left]; A[left] = A[right]; A[left] = temp; left ++; right --; }}template
void Exchange(vector
& A,int m){
//reverse the whole vector realExchange(A,0,A.size()); //reverse the element between 0 and m realExchange(A,0,m); //reverse the elements between m and A.size() realExchange(A,m,A.size());}

错误出现

在这里插入图片描述

  • 错误用例(花了一分,心疼啊)
    在这里插入图片描述
  • 分析:显而易见的,没有料想到不同的数据类型,只是在整型中不断尝试,没有发现问题
  • 修改:将int修改成string,然后就通过了。这里如果是数字也是可以看成字符型的输入的,但是如果声明为的整型,就完全识别不了字符串型。
    在这里插入图片描述

在这里插入图片描述

分析与总结

  • 对于vector,首先要考虑到对于的索引的限制,给出的索引是否合理,越界或者的小于零
  • 不要仅仅局限于一种数据类型的,既然已经要求了多种数据类型的,那就试试看别的数据类型

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

你可能感兴趣的文章
Mysql几种索引类型的区别及适用情况
查看>>
Redis缓存穿透、缓存雪崩、redis并发问题分析
查看>>
Redis持久化的两种方式
查看>>
判断一个数组,是否可以分成两个数组之和相等的数组
查看>>
背包问题
查看>>
结构体变量之间的比较和赋值原理
查看>>
C++ const修饰函数、函数参数、函数返回值
查看>>
将单链表的每k个节点之间逆序
查看>>
删除链表中重复的节点——重复节点不保留
查看>>
2018腾讯校招编程题——最重要的城市
查看>>
删除链表中重复的节点——重复节点保留一个
查看>>
实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit()).md
查看>>
链表排序.md
查看>>
进程与线程的区别与联系、进程与线程的通信方式
查看>>
C++与C的区别
查看>>
产生死锁的必要条件及处理方法
查看>>
TCP和UDP的区别
查看>>
TCP状态中 time_wait 的作用
查看>>
事务具有四个特性
查看>>
树的先序、中序、后序和层次遍历-C++实现
查看>>