根据不使用中间变量交换两个变量值算法可进一步扩展到数组中:
#include <stdio.h>
void change(int* a, int* b) {
*b = *a ^ *b;
*a = *a ^ *b;
*b = *a ^ *b;
}
// a[] 为数组
// cnt为数组长度
void reverse_array(int a[], int cnt) {
int first, last;
for(first = 0, last = cnt -1; first < last; first++, last--) {
change(&a[first], &a[last]);
}
}
void print_array(int a[], int cnt) {
int i;
for(i = 0; i < cnt; i++) {
printf("a[%d]=%d\n", i, a[i]);
}
}
int main() {
int array[5] = {1, 2, 3, 4, 5};
print_array(array, 5);
reverse_array(array, 5);
printf("\n");
print_array(array, 5);
}
这里需要注意一点,change函数在作交换时,不能对自身做, 比如:
int x = 3;
change(&x, &x);
printf("x=%d\n", x);
这将导致x结果为0, 原因在于change函数改变了引用地址中的值:
*b = *a ^ *b;
// 此时如果*a==*b, 那么根据波尔规则,a^a=0 , *b的值被设置为0,
//又因为a于b指向同一块内存,赋值后*a也被设置为0
*a = *a ^ *b;
// 接着*a = 0 ^ 0 , 那么*a还是0
*b = *a ^ *b;
// 最后 *b = 0 ^ 0 , 结果自然变为0
分享到:
相关推荐
数据结构 线性表 实验代码 C++ 数组 hust 赵明
非常清晰,非扫描。是数据结构教材的配套用书。内容很棒用c++实现,是学习数据结构的必备书籍。
数组 Remove Duplicates from Sorted Array Remove Duplicates from Sorted Array II Longest Consecutive Sequence Two Sum 3Sum 3Sum Closest 4Sum Remove Element Move Zeroes Next Permutation Permutation ...
和其他算法问题 文件描述 2_add_two_numbers.c : 两个数相加 3_solution.c : 无重复字符的最长子串 space_urlencode.c : 在 O(n) space_urlencode.c空间更改为“ ” ./two_dimension_binary_search.c : 二维排序数组...
Reverse Array (数组翻转) code void reverse(int array[], int left, int right) { int l, r; for (l = left, r = right; l < r; l++, r--) { array[l] = array[l] ^ array[r]; array[r] = array[l] ^ ...
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。 function reverseString(str) { var str2 = ''; for(var i=str.length-1;i>=0;i--){ str2 += str[i]; } return str2; ...
front、insert(i)、remove(i)、reverse、removeValue 使用带有尾指针的单向链表的队列实现。 二分搜索(不是真正的数据结构,但我猜还可以) 迭代和递归 二叉搜索树 第一次使用泛型! 哈希表 添加,获取,删除,散列...
Javascript Basic 1、Javascript 概述(了解) Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS...
将有序数组转换为二叉搜索树 面向对象编程术语 - Abstraction - Inheritance - Cohesion - Coupling 集合和数学 API - Maps - Lists - Concurrency 二分查找 图遍历算法 - BFS - DFS - Shortest path algorithm like...
LRU算法 基于访问时间的链表 或者 基于插入时间的链表 哈希表: leetcode: 1. two sum, 219. contains duplicate(滑动窗口), 454. 4sum 数组 leetcode: 基本排序算法 插入, 归并 -> 递归 和 迭代 快排 -> 随机 三路 ...
JavaScript中提供了sort()和reverse()方法对数组项重新排序。但很多时候这两个方法无法满足我们实际业务的需求,比如说扑克牌游戏中的随机洗牌。 在这篇文章一起来学习如何完成上面这个示例的效果,以及一些有关于...
4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本...
在继续练习JavaScript的过程中,我将更新此存储库以托管常见问题的方法。 问题集可能是来自潜在采访或数据结构和... 此方法无需使用“ .reverse()”方法即可反转数组的项目。 它是通过从背面取出每个项目,然后将其推
Javascript中的算法 用Javascript实现的基本算法 嘶嘶声 无害赎金票据 回文 凯撒密码 逆词 反向阵列就位 两次总和 快速排序 二元搜寻 斐波那契 阶乘 气泡排序
Array.prototype.reverse Array.prototype.join 思维方法: 要熟悉所有API,知道在某些场景的实际应用 数组 电话号码的组合(公式运算) 卡牌分组(归类运算) 种花问题(筛选运算) 格雷编码(二进制运算) 排序 ...
解决一些基本数据结构和算法问题(C ++)及其时间复杂性 reverse.cpp-反转给定数组的程序-O(n) minimax.cpp-使用最少的比较次数找出数组中最大和最小元素的程序-O(n) kthmaxmin.cpp-在给定数组中打印第K个...
java安卓辅助源码 安卓逆向 01 frida高级逆向 frida hook Java frida hook native frida辅助分析ollvm字符串加密 ...C程序逆向:函数、结构体、数组、位操作 C++类、构造/析构函数、虚函数、虚表 C++继承、重载
创建数组类:insert()、removeAt()、indexOf()、print()、max()、reverse()、insertAt()。 链表 具有所需方法的基本单链表实现。 一次性反转单链表。 一次性从单向链表的最后一个中找到第 K 个节点。 一次找到单向...
运用局部搜索算法求解SAT问题 int **arr; //描述SAT问题的二维数组 int Var_Num; //变元个数 int Clause_Num; //子句个数 ifstream fin; ofstream fout; void Random(int *v, int *s); int Proper_Num(int *s); ...
算法概念和算法课程。4.1 数组。 1. Find a pair in an array of size 'n', whose sum is X2. Find a majority element in an array of size 'n'3. Find the number occuring odd number of times in a given array ...