概述
写在前面:
自己写了一遍,不够精简,又借鉴了别人的例子,最后得出这个版本。
恐怕既不是最简单的,也不是最精妙的,但是我目前能实现的比较清晰简洁的一版。
还是先把‘‘见怪不怪’’给大牛写在前面。。。
好了开始吧~
第一个查找:
这个没什么好说的
就按值查找并返回下标
就看吧~
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 语言数组基本操作(查找,修改,删除,插入)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复