我是靠谱客的博主 傲娇流沙,最近开发中收集的这篇文章主要介绍c 语言数组基本操作(查找,修改,删除,插入),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面:

自己写了一遍,不够精简,又借鉴了别人的例子,最后得出这个版本。
恐怕既不是最简单的,也不是最精妙的,但是我目前能实现的比较清晰简洁的一版。
还是先把‘‘见怪不怪’’给大牛写在前面。。。

好了开始吧~

第一个查找:

这个没什么好说的
就按值查找并返回下标
就看吧~

int ArrayFindByValue(int* p, int len, int value, int begin)
{
if (begin <= 0)
{
begin = 0;
//最少也是从第0个开始找
}
while (begin < len)
{
if (p[begin] == value)
{
return begin;
//找到则返回下标
}
++begin;
}
return -1;
//找不到则返回-1
}

第二个修改:

emmm…
因为建立在查找函数的基础上所以简洁了好多
也是按值操作的,一次性修改所有满足条件元素

void ArrayModifyByValue(int* p, int len, int oldvalue, int newvalue)
{
int index = 0;
while ((index = ArrayFindByValue(p, len, oldvalue, index))!=-1)
{//只要查找的值不是-1,就把对应下标值赋给index
p[index] = newvalue;
++index;
//下一次从index的下一个开始找
}
}

第三个删除:

删除要考虑到数组长度变短的问题,所以还要有个指针去“戳”长度变量
╮(╯▽╰)╭ ~~
为了尽量降低时间复杂度,我用的是这个两个(ji)下(you)标版
j 是每次都要自加的,但 i 只有在 j 没遇到value时自加
每次把 j 对应的值赋给 i
这样就跳过了所以等于目标值value的元素
最后再让数组长度等于 i

void ArrayDeleteByValue(int* p, int* len, int value)
{
int i, j;
//i,j看作两个下标
for (i = 0, j = 0; j < *len; ++j)
{
if (p[j] != value)
//跳过所有应删元素
{
p[i] = p[j];
i++;
//i一共加了(len-应删元素个数)次
}
}
*len = i;
//此时下标i就是新的数组长度
}

第四个插入:

插入也要考虑到数组长度变短的问题,所以也要有个指针去“戳”长度变量
1.
先上个我写的版本,就是后缀simple这个…
其实也不错,对吧。
好吧,说实在的,这是一个比较差的版本
一次只能插入一个元素,也就是说要插入n个数的话 …
时间复杂度这匹野马就脱了缰绳了 …╮(╯▽╰)╭
还有就是前面俩 if 对插入位置index做了控制

void ArrayInsertByIndex_simple (int* p, int* len, int index, int value)
{
if (index <= 0)
{
index = 0;
//index小于0默认加到第0个前面
}
if (index >= *len)
{
p[*len] = value;
//index大于等于数组长度默认放到最后
(*len)++;
return;
}
for (int i = 0; i <= *len - index - 1; ++i)
{
p[*len - i] = p[*len - i - 1];
//将index后面元素依次后移一位
}
(*len)++;
//数组长度+1
p[index] = value;
}

2.
下面这个是借鉴别人之后,(ban)(chao)(ban)(xie)修改出的版本
不管插入几个,只遍历一遍数组,爽吧~
这里以隔十个元素插入为例
因为有插入操作前面的计数操作,所以连对index的控制也省了…
(不知道注释写的清不清楚)

void ArrayInsertByIndex(int* p, int* len, int index, int value)
{
int count = 0;
for (int i = 0; i < *len; ++i)
{
if (i%10 == index)
{
count++;
//计算要插入元素个数
}
}
int oldindex, newindex;
//两个下标变量
oldindex = *len - 1;
//old放到最后一个元素
newindex = *len + count - 1;//new放到old后第count个
while (oldindex >= 0)
{
p[newindex] = p[oldindex];//每次都把old赋给new
if (oldindex%10 == index)
{
newindex--;
//如果找到对应位置让new靠近old一个下标
p[newindex] = value;
}
oldindex--;
//每次两下标值-1
newindex--;
}
*len += count;
//数组增加了count个元素
}

就这样吧,谢观!~

最后

以上就是傲娇流沙为你收集整理的c 语言数组基本操作(查找,修改,删除,插入)的全部内容,希望文章能够帮你解决c 语言数组基本操作(查找,修改,删除,插入)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部