题目:

有序数组中加入一个新的数据,需保持数组有序,如何操作?

方式A :for循环将后续数组依次后移。

方式B :内存拷贝

代码:

/*****************************************************************************
** Name:20130424-arrayCopy.c
** 有序数组内插入新的数据,而后续数据向后移动,传统作为for操作,改进方式使用内存拷贝
** Author:Fivezh
** Date:20130424
** Copyright (c) 2013,All Rights Reserved!
*****************************************************************************/
#include <stdio.h>
#include <string.h> void showArrary(int *pArray, int count)
{
int i;
for (i = ; i < count; ++i)
{
printf("%d ", *(pArray +i));
}
printf("\n"); }
int main(int argc, char const *argv[])
{
int arrayList[]={,,,,,};//原始6个数据
//现需要插入数据5,且保持有序
int insertData = ;
int *pInsertPoint = NULL;
int i;
showArrary(arrayList,);
for (i = ; i < sizeof(arrayList); ++i)
{
// printf("%d ", arrayList[i]);
if (arrayList[i] <= insertData)
{
continue;
}
else
{
pInsertPoint = &arrayList[i];
printf("insert before %d\n", arrayList[i]);
break;
}
} if (pInsertPoint != NULL)
{
int *p = NULL; p = memmove(pInsertPoint+,pInsertPoint,*sizeof(int)); // p = memcpy(pInsertPoint+1,pInsertPoint,2*sizeof(int));
//当拷贝区域存在重叠区域时,memcpy()函数会导致覆盖和cpy错误问题;而memmove()可有效避免
*pInsertPoint = insertData; }
showArrary(arrayList,); return ;
}

总结:

对数组的操作,潜意识里只有循环操作,多理解c/c++的指针,会有额外收获。

1. 指针+1,到底移动了多少个字节,是由指针类型决定的,如

int *p=0x1234;p=p+1;

则此时p=0x1238

char *p=0x1234;p=p+1;

则此时p=0x1235

2. 数组名+1,到底移动了多少字节,

int a[10];

则a+1或&a[0]+1或(int *)&a+1或(int *)((char *)&a+sizeof(int))均可表示a[1]的地址,即&a[1]

参考1:腾讯2013年实习生笔试题目(附答案)http://www.cnblogs.com/xiaoxuetu/archive/2013/04/20/3032811.html

参考2:memcpy与memmove区别与实现 http://www.cnblogs.com/kekec/archive/2011/07/22/2114107.html

数组内数据不使用for循环实现多个移动的更多相关文章

  1. js实现数组内数据的上移和下移

    var swapItems = function(arr, index1, index2){ arr[index1] = arr.splice(index2,1,arr[index1])[0] ret ...

  2. python多层数组合成一个数组后循环打印出数组内的每一项元素的方法

    a=[1,2,3,4] b=[5,6,7,8] c=[a,b] def test(c): for i in c: return i print(test(c)) 以上代码执行后打印出来的结果是 预期目 ...

  3. 将数组内的元素循环左移P个位置

    问题可以转化为将数组内前 n 个元素进行逆置,再将后(n-p)个元素逆置,最后将整个数组逆置 void Reverse(int A[],int pos1,int pos2){ // 将A[pos1]与 ...

  4. angularjs 解决ng-repeat数组内重复对象报错的问题

    ng-repeat 循环数组内元素时,如果数组内元素重复,angular会抛出异常: Error: [ngRepeat:dupes] http://errors.angularjs.org/1.4.3 ...

  5. 字符类型char、字符串与字符数组、字符数组与数据数组区别

    字符类型是以ASCII码值运算的:小写字母比相应的大写字母大32,其中A=65,a=97 Esc键 27(十进制).'\x1B'(十六进制).'\33'(八进制) 转义字符:\0 空字符     AS ...

  6. C#使用NPOI将DataGridView内数据写入电子表格Excel

    NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件.本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容.在使用NPOI之 ...

  7. php数组插入数据

    php数组插入数据 一.总结 代码要多敲,看是看不会的 php代码直接在页面不好敲,可以去控制器里面敲 二.目标 在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式. 三.代码 (1).思 ...

  8. 用最小的空间复杂度找出一个长度为n的数组且数据中的元素是[0,n-1]中任一个重复的数据。

    用最小的空间复杂度找出一个长度为n的数组且数据中的元素是[0,n-1]中任一个重复的数据. 比如:[1, 2, 3, 3, 2, 2, 6, 7, 8, 9] 中 2 or 3 分析:这道题目,实现比 ...

  9. 用数组实现队列(顺序队列&循环队列)

    用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...

随机推荐

  1. Eclipse 中 Could not find *.apk的解决方案

    Eclipse 中 Could not find *.apk的解决方案 有时候debug的时候出现Could not find *.apk 特别是导入别人的例子的时候 1.选择properties-& ...

  2. jquery 插入节点的方法

    方法 描述 示例 append() 向每个匹配的元素内部追加内容 HTML代码: <p>我想说:</p> jQuery代码: $("p").append(& ...

  3. python之基础补充

    一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1  字节(bytes) = 8 位(bit) 格式: print(bytes('字符' ...

  4. 2018.09.22 牧场的安排(状压dp)

    描述 农民 John 购买了一处肥沃的矩形牧场,分成M*N(1 <= M <= 12; 1 <= N <= 12)个 格子.他想在那里的一些格子中种植美味的玉米.遗憾的是,有些 ...

  5. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...

  6. TopK排序

    利用快速排序实现TopK排序 //返回支点的下标 int partition(int *arr, int low, int high) { //选取第一个元素为支点 int pivot = arr[l ...

  7. <%@ include file=""%>与<jsp:include page=""/>

    https://www.cnblogs.com/sharpest/p/6117629.html

  8. 对于java的命名规范(标识符)

    java的命名规范基本都需要使用标识符来命名的: 标识符的介绍: 标识符作用: 给变量起名字的用的. 标识符的组成: 1.Unicode编码:包含大.小写字母,数字,汉字(不建议使用).  2.美元符 ...

  9. 使用Octopress博客 搭建博客

    Octopress介绍 Octopress是一款优秀的静态化博客系统,也是一个本地化的博客系统,之前部落在介绍免费开源Github Pages空间时有提到过Octopress,Github为我们提供长 ...

  10. hdu2844

    题目 这道题,刚开始题没读懂,就是这句话:,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of ...