数据结构之数组及其操作(C语言版)
来源:互联网 发布:淘宝苏宁易购投诉 编辑:程序博客网 时间:2024/06/05 12:02
一.数组结构体定义
#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
阅读全文
1 0
- 数据结构之数组及其操作(C语言版)
- 数据结构之对线性表的操作(C语言版)
- 数据结构之对顺序栈的操作(C语言版)
- 数据结构C语言版之二叉树操作
- 串及其操作(C语言版)
- 树及其操作(C语言版)
- 图及其操作(C语言版)
- 数据结构C语言版基础操作(1)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(多维数组的基本操作)
- 数据结构(c语言版)之顺序表
- 数据结构C语言版之邻接矩阵(遍历)
- 数据结构之单链表(c语言版)
- 数据结构之线性表(C语言版)
- 数据结构之简单排序(C语言版)
- 学习笔记------数据结构(C语言版)数组之十字链表
- 数据结构(C语言版)
- 数据结构(C语言版)
- 数据结构(C语言版)
- Java并发编程-volatile可见性的介绍
- matplotlib--figure
- 选择排序
- MySql学习笔记(3)--sql及DDL语句操作
- Java面试题总结(一)----java基础篇
- 数据结构之数组及其操作(C语言版)
- 正规方程求解特征参数的推导过程
- 【bzoj3040】最短路(road)
- 移除ArrayBuffer中第一个负数后的所有负数
- 未名湖边的烦恼 深搜
- RunTime类,后台快速打开浏览器
- Design support library.库学习资料总结
- java VisualVM 远程连接linux的tomcat
- 二分图最大匹配小结