`

编程范式之rotate操作

 
阅读更多

我们在考虑数据前后交换的问题时,若middle指针的位置小于中位数,即后方移动的数据多于前方,故需要将前方数据先进行备份,再将后方数据移动至front指针位置,最后将先前备份的数据拷贝回剩余的数据结构中。

这是一种通用的解决方案。着重理解rotate1方法。注意内存位置的移动和计算(核心思想)。memmove方法与memcpy方法相似,不同的是,目标和源 有重叠时,其能够正常工作。

#include <iostream>
#include <string.h>

using namespace std;

void rotate1(void *front, void *middle, void *end) {
  int front_size = (char *)middle - (char *)front;
	int back_size = (char *)end - (char *)middle; 
//	char buffer[front_size];
  char *buffer = (char *) malloc(front_size);
	memcpy(buffer, front, front_size);
	memmove(front, middle, back_size);
	memcpy((char *)end - front_size, buffer, front_size);
  //also like follow 
//memcpy((char *)front + ((char *)end - (char *)middle), temp, (char *)middle - (char *)front);
	free(buffer);
}

void rotate2(void *front, void *middle, void *end) {
	char *temp = (char *) malloc((char *)middle - (char *)front);
	memcpy(temp, front, (char *)middle - (char *)front);
	memmove(front, middle, (char *)end - (char *)middle);
	memcpy((char *)front + ((char *)end - (char *)middle), temp, (char *)middle - (char *)front);
	free(temp);
}

int main() {

	int a[7] = {1, 2, 3, 4, 5, 6, 7};
	rotate1(&a[0], &a[2], &a[6]);

	int i=0;
	for(; i < 7; i++) {
		cout << a[i] << endl;
	}

	getchar();
	return 0;
}

 

分享到:
评论

相关推荐

    Python基于犀牛编程总结.pdf

    Python支持多种编程范式,包括面向对象编程、命令式编程、函数式编程等。 在文件内容中,我们可以看到Python基础语法的应用,如变量定义、函数定义、条件语句和循环控制结构等。例如,定义变量时使用了赋值运算符...

    用C++面向对象思想实现的置换索引(KWIC)

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它以“对象”为核心,对象是类的实例,包含了数据(属性)和操作这些数据的方法(函数)。在这个KWIC项目中,我们可以创建一个`Word`类,用于...

    图片轮转效果

    面向对象编程(OOP)是JavaScript中的一种高级编程范式,它通过类和对象的概念,使代码更易于组织和维护。在这个案例中,我们可以创建一个名为`ImageCarousel`的类,该类可能包含以下属性和方法: 1. **属性**: -...

    大数据开发123456789

    首先,Python是一种广泛用于大数据开发的编程语言,它具有易学易用、支持多种编程范式、丰富的第三方库等优点。在大数据开发中,Python常常被用于数据处理、分析、可视化以及机器学习等领域。 Pillow是Python的一个...

    swift-AXAnimationChain是一个链式动画库

    链式编程是一种编程范式,通过返回自身实例来实现方法调用的串联,使得代码更具有可读性。在AXAnimationChain中,你可以像这样创建一个动画链: ```swift view.animate .alpha(to: 0) .scale(to: 0.5, duration: ...

    用Python+PIL进行图像处理.docx

    它支持多种编程范式,包括面向对象、命令式和函数式编程。Python的强大之处在于其庞大的标准库和第三方库,这使得开发者能够轻松地开发各种类型的应用程序,从Web应用到科学计算、数据分析等。 #### PIL简介 PIL...

    射他!(Java小游戏:飞机大战).zip

    在Java编程中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它将数据和操作数据的方法封装在一起,形成对象。在这个游戏中,我们可以看到以下面向对象设计的关键概念: 1. 类(Class)...

    ObjectOrientedProgramming:面向对象编程

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在OOP中,对象是类的实例,类是对象的蓝图。这种编程方式允许我们通过模拟...

    使用面向对象设计的俄罗斯方块源码

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将程序设计中的实体(如数据和操作)封装在独立的对象中。在"使用面向对象设计的俄罗斯方块源码"中,我们可以深入理解如何运用OOP原则来...

    用scala脚本语言验证cordic算法

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,广泛应用于大数据处理、科学计算和高性能计算领域。在本话题中,我们将深入探讨如何使用Scala来实现Cordic算法,这是一种高效计算三角函数值的算法...

    Space-Flight-Super-Sim---With-Collectable-Asteroids-Mega-Game:太空飞行超级模拟-具有可收集的小行星超级游戏

    它的语法简洁,性能高效,支持多种编程范式,包括面向对象、面向组件和函数式编程,这使得开发者能够灵活地构建复杂的游戏逻辑和交互系统。 游戏的主程序可能由多个C#类组成,每个类代表游戏中的一个实体或功能模块...

Global site tag (gtag.js) - Google Analytics