顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换(数据结构OJ练习)(样例4553 WA)

   日期:2020-10-16     浏览:572    评论:0    
核心提示:顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换问题描述目的:使用STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。应用1:试设计一个算法,用尽可能少的辅助空间将顺序表中前 m 个元素和后 n 个元素进行互换,即将线性表(a1,a2,…,am,b1,b2,…,bn) 改变成(b1,b2,…,bn,a1,a2,…,am)。参考函数原型:templatevoid Exchange( vector &A,int m );// 本算法实现顺序表

顺序表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

输出说明

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

第二行:逆置结果

输入范例

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

输出范例

13 5 27 9 32 123 76 98 54 87 

123 76 98 54 87 13 5 27 9 32 

思路分析

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

伪代码

void realExchange(vector<Elemtype> &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<class Elemtype>
void Exchange(vector<Elemtype>& 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,首先要考虑到对于的索引的限制,给出的索引是否合理,越界或者的小于零
  • 不要仅仅局限于一种数据类型的,既然已经要求了多种数据类型的,那就试试看别的数据类型
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服