c语言中数组实用的三个步骤,数据结构之数组及其操作(C语言版)

一.数组结构体定义

#define ARRAY_SIZE 50

typedef struct

{

int data[ARRAY_SIZE];

int len;

}MyArray;其中,

ARRAY_SIZE表示数组的最大长度

len表示数组的当前长度,其实也可以表示为数组最后一个元素的下标(last),没有多大区别,凭个人喜好。

二. 初始化操作

void ArrayInit(MyArray *arr)

{

int i;

for (i = 0; i < ARRAY_SIZE; ++i)

{

arr->data[i] = 0;

}

arr->len = 0;

}初始化有两个步骤,一是将数组中所有元素初始化为0,因为在C语言中定义一个数组时不是将所有元素初始化为0,而是保留原先存储空间中的值,所以要进行初始化;

二是将数组长度置为0(定义为末尾元素下标时可置为-1,表示没有元素)。

三. 在数组末尾追加元素

int ArrayAppend(MyArray *arr, int var)

{

if(arr->len == ARRAY_SIZE)

{

//数组已满,无法添加元素

return -1;

}

arr->data[arr->len++] = var;

return 0;

}

往数组中添加元素时,需要检查数组是否已满,只有没满的时候才可以插入元素,插入元素后长度+1。

四. 在指定位置插入元素

int ArrayInsert(MyArray *arr, int var, int index)

{

if(arr->len >= ARRAY_SIZE)

{

//数组已满,无法插入元素

return -1;

}

if (index < 0 && index >= ARRAY_SIZE)

{

//指定的位置超出数组下标范围

return -1;

}

if (index >= arr->len)

{

arr->data[index] = var;

arr->len = index + 1;

}

else

{

int i;

for (i = arr->len - 1; i >= index; i--)

{

arr->data[i + 1] = arr->data[i];

}

arr->data[index] = var;

arr->len++;

}

return 0;

}

指定的位置有两种合法的情况,一是在大于现有数组长度len与最大长度之间,此时插入的位置没有有效数据,可以直接插入,插入后数组长度变为指定插入位置+1;

二是在现有数组长度以内,此时需要将指定位置之后的元素都往后挪,空出位置来让新元素插入。

五.查找元素

int ArraySearch(MyArray arr, int var)

{

int i;

if (arr.len == 0)

{

//数组为空,无法查找

return -1;

}

for(i = 0; i < arr.len; i++)

{

if (var == arr.data[i])

{

break;

}

}

if (i >= arr.len)

{

//遍历完了整个数组,没有找到指定元素

return -1;

}

return i;//返回查找元素所在的下标

}

六. 获取指定下标的元素

int ArrayGetData(MyArray arr, int index)

{

if (index < 0 || index >= arr.len)

{

//指定下标超出范围

return -1;

}

return arr.data[index];

}

七. 删除指定位置的元素

int ArrayDelete(MyArray *arr, int index)

{

int i;

if (index < 0 || index >= arr->len)

{

//指定位置超出范围

return -1;

}

for (i = index; i < arr->len - 1; ++i)

{

arr->data[i] = arr->data[i + 1];

}

arr->len--;

return 0;

}

八. 打印数组

void ArrayDisplay(MyArray arr)

{

int i;

if(arr.len == 0)

{

//数组为空

return;

}

printf("[ ");

for(i = 0; i < arr.len; i++)

{

printf("%d ", arr.data[i]);

}

printf("]\n");

printf("当前数组长度 = %d\n", arr.len);

}

九. 示例

int main()

{

MyArray arr;

ArrayInit(&arr);

ArrayAppend(&arr, 2);

ArrayAppend(&arr, 8);

ArrayAppend(&arr, 5);

ArrayAppend(&arr, 2);

ArrayInsert(&arr, 6, 1);

ArrayInsert(&arr, 7, 1);

ArrayInsert(&arr, 4, 1);

ArrayInsert(&arr, 14, 1);

ArrayDisplay(arr);

ArrayDelete(&arr, 3);

ArrayDisplay(arr);

printf("搜索指定数据的位置 = %d\n", ArraySearch(arr, 5));

printf("获取指定位置的数据 = %d\n", ArrayGetData(arr, 2));

return 0;

}

输出结果如下:

[ 2 14 4 7 6 8 5 2 ]

当前数组长度 = 8

[ 2 14 4 6 8 5 2 ]

当前数组长度 = 7

搜索指定数据的位置 = 5

获取指定位置的数据 = 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值