我是靠谱客的博主 愤怒紫菜,最近开发中收集的这篇文章主要介绍数组内数据不使用for循环实现多个移动,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:

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

方式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 = 0; i < count; ++i)
    {
        printf("%d ", *(pArray +i));
    }
    printf("n");

}
int main(int argc, char const *argv[])
{
    int arrayList[10]={1,2,3,4,6,7};//原始6个数据
    //现需要插入数据5,且保持有序
    int insertData = 5;
    int *pInsertPoint = NULL;
    int i;
    showArrary(arrayList,10);
    for (i = 0; i < sizeof(arrayList); ++i)
    {
        // printf("%d ", arrayList[i]);
        if (arrayList[i] <= insertData)
        {
            continue;
        }
        else
        {
            pInsertPoint = &arrayList[i];
            printf("insert before %dn", arrayList[i]);
            break;
        }
    }

    if (pInsertPoint != NULL)
    {
        int *p = NULL;
        
        p = memmove(pInsertPoint+1,pInsertPoint,2*sizeof(int));
        
        // p = memcpy(pInsertPoint+1,pInsertPoint,2*sizeof(int));
        //当拷贝区域存在重叠区域时,memcpy()函数会导致覆盖和cpy错误问题;而memmove()可有效避免
        *pInsertPoint = insertData;

    }
    showArrary(arrayList,10);

    return 0;
}

 

总结:

对数组的操作,潜意识里只有循环操作,多理解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

转载于:https://www.cnblogs.com/xfiver/p/3040172.html

最后

以上就是愤怒紫菜为你收集整理的数组内数据不使用for循环实现多个移动的全部内容,希望文章能够帮你解决数组内数据不使用for循环实现多个移动所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部