当前位置: 首页 > news >正文

C语言初步学习:数组的增删查改

引言

本项目实现了基于静态数组的动态数组操作功能,包括增删查改等基本操作。

核心功能实现

1. 添加元素 (`add`)



void add(int e, int arr[], int s) {
arr[s] = e;
}

- **作用**: 直接在数组末尾添加新元素
- **设计原因**: 利用 [size] 参数作为索引,将新元素放置在当前有效元素之后,实现高效的尾部插入操作

2. 删除元素

按下标删除 (`remove`)

int remove(int index, int arr[], int s) {
if (index < 0 || index >= s) {
printf("输入的下标不在合理范围内\n");
return 0;
}
int o = arr[index];
for (int i = index; i < s - 1; i++) {
arr[i] = arr[i + 1];
}
arr[s - 1] = 0;
return o;
}

- **作用**: 根据指定下标删除元素,并将后续元素前移填补空位
- **设计原因**: 
- 先进行边界检查确保索引有效性
- 保存待删除元素用于返回
- 通过循环将目标位置后的所有元素向前移动一位
- 将最后一个位置赋值零以清除无效数据

按值删除 (`removeBye`)

int removeBye(int e, int arr[], int s) {
int index = 0;
for (int i = 0; i < s; i++) {
int n = arr[i];
if (n != e) {
arr[i - index] = arr[i];
} else {
index++;
}
}
return index;
}

- **作用**: 删除数组中所有等于指定值的元素
- **设计原因**: 
- 使用 `index` 变量记录已遇到的待删除元素个数
- 采用双指针思想,将保留的元素移动到正确位置
- 返回删除的元素总数,供外部更新 `size` 变量

3. 查找元素

按下标查找 (`get`)

int get(int index, int arr[], int s) {
if (index < 0 || index >= s) {
printf("索引位置不合法");
return NULL;
}
return arr[index];
}

- **作用**: 根据下标获取对应元素值
- **设计原因**: 
- 提供安全的元素访问机制,先检查索引是否在有效范围内
- 若索引非法则输出错误提示并返回 NULL(注意此处存在类型不匹配问题)

按值查找 (`indexOf`)

int indexOf(int e, int arr[], int s) {
for (int i = 0; i < s; i++) {
if (arr[i] == e) {
return i;
}
}
return -1;
}

- **作用**: 查找指定元素在数组中的首次出现位置
- **设计原因**: 
- 线性遍历数组寻找匹配元素
- 找到则返回对应下标,未找到返回 -1 表示不存在

4. 插入元素 ([insert]



void insert(int index, int arr[], int s, int e) {
if (index < 0 || index > s) {
printf("插入位置不合法\n");
return ;
}
for (int i = s; i > index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = e;
}

- **作用**: 在指定位置插入新元素,原有元素向后移动
- **设计原因**: 
- 允许在数组末尾插入(index == s),所以边界检查使用 `index > s`
- 从后往前移动元素避免覆盖
- 在指定位置放置新元素

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
//使用常规数组实现
#define  len  100

//添加单个元素
void add(int e, int arr[], int s) {
arr[s] = e;
}

//删除(根据下标)
int remove(int index, int arr[], int s) {
if (index < 0 || index >= s) {
printf("输入的下标不在合理范围内\n");
return 0;
}
int o = arr[index];
for (int i = index; i < s - 1; i++) {
arr[i] = arr[i + 1];
}
arr[s - 1] = 0;
return o;
}

//删除(根据元素)
int removeBye(int e, int arr[], int s) {

    int index = 0;

    for (int i = 0; i < s; i++) {
int n = arr[i];
if (n != e) {
arr[i - index] = arr[i];

        } else {
index++;
}
}
return index;

}

//根据下标查找元素
int get(int index, int arr[], int s) {
if (index < 0 || index >= s) {
printf("索引位置不合法");
return NULL;
}
return arr[index];
}

//根据元素查找下标
int indexOf(int e, int arr[], int s) {
for (int i = 0; i < s; i++) {
if (arr[i] == e) {
return i;
}
}
return -1;
}

//插入元素
void insert(int index, int arr[], int s, int e) {

    if (index < 0 || index > s) {
printf("插入位置不合法\n");
return ;
}

    for (int i = s; i > index; i--) {
arr[i] = arr[i - 1];

    }
arr[index] = e;

}

int main() {
int arr[len] = {0};
int size = 0;

    while (1) {
printf("添加单个元素->101\n");
printf("根据下标删除单个元素->201\n");
printf("根据元素删除->202\n");
printf("根据下标查找单个元素->301\n");
printf("根据元素查找下标->302\n");
printf("根据下表插入元素->401\n");
printf("结束程序->999");

        printf("请输入功能编号:\n");

        int id = 0;
scanf("%d", &id);
if (id == 101) {
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
add(num, arr, size);
size++;
} else if (id == 201) {
int index = 0;
printf("请输入一个下标:\n");
scanf("%d", &index);
int o = remove(index, arr, size);
printf("被删除的元素是:%d", o);
size--;

        } else if (id == 202) {
int e = 0;
printf("请输入一个需要被删除的元素:\n");
scanf("%d", &e);
int index = removeBye(e, arr, size);
size -= index;

        } else if (id == 301) {
int index = 0;
printf("请输入一个下标:\n");
scanf("%d", &index);
int e = get(index, arr, size);
if (e != NULL) {
printf("查找到的元素是:%d\n", e);

            }

        } else if (id == 302) {
int e = 0;
printf("请输入一个需要查找下标的数:\n");
scanf("%d", &e);
int index = indexOf(e, arr, size);
if (index >= 0) {
printf("元素存在,当前位置是:%d\n", index);
} else {
printf("元素不存在\n");
}
} else if (id == 401) {
int index = 0;
int e = 0;
printf("请输入插入元素的坐标:\n");
scanf("%d", &index);
printf("请输入插入的元素:\n");
scanf("%d", &e);
insert(index, arr, size, e);
size++;

        } else if (id == 999) {
exit(999);
} else {
printf("输入不合法,请输入正确的编号~\n");
}
printf("现有的元素: \n");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}

## 使用说明


程序提供交互式菜单,支持以下操作:
1. 添加元素 (101)
2. 按下标删除 (201)
3. 按值删除 (202)
4. 按下标查找 (301)
5. 按值查找 (302)
6. 插入元素 (401)
7. 退出程序 (999)

http://www.dtcms.com/a/486778.html

相关文章:

  • 【组队学习】Post-training-of-LLMs TASK02
  • 系统设计相关知识总结
  • 做视频的模板下载网站xunsearch做搜索网站
  • 做企业网站需要人维护么电子商务推广
  • Linux驱动开发原理详解:从入门到实践
  • HarmonyOS之Environment
  • 鸿蒙仓颉:如何获取全局定义的Context以及使用方法
  • 银河麒麟V10的X86架构部署postgresql,解决信创离线部署兼容问题
  • 如何建设物流网站智慧团建官网手机版登录
  • 寄生虫网站代做工程公司取名字大全
  • 用户体验就是新SEO:如何同时提升搜索者满意度和搜索排名
  • SpringBoot的IOC和DI学习
  • 《道德经》第十七章
  • 长宁区网站制作设计wordpress添加微信分享功能
  • vue做pc网站某网站seo诊断分析和优化方案
  • AWS MSK IAM 认证访问权限配置指南
  • 郑州网站制作价格网站做线
  • Code2Video: 代码驱动生成教育视频
  • 【Qt】7.信号和槽_connect函数用法(1)
  • 【成功案例分享】手腕鼓包?不痛不痒?我的腱鞘囊肿15天自愈实战记录
  • gcc: 函数调用优化一例,在栈里找不到函数调用的影子;gdb
  • Navicat Premium 与金仓数据库融合实践:高效管理国产数据库新方案
  • 高光谱成像在种子品种、种子纯度、种子活力鉴别的研究进展
  • 怎样在网上建网站做电商生意网站抓取压力高
  • 陕西网站建设开发企业网站搜索优化外
  • 校园网站建设初探论文南山品牌网站建设企业
  • Apache Spark算法开发指导-特征转换TargetEncoder
  • spark热点key导致的数据倾斜复现和加盐处理
  • Chrominum的技术架构
  • 青岛网站域名备案查询佛山市企业网站建设哪家好