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

C语言入门:数组的常见操作算法

一、常规操作

1.添加元素

1)按位置区分:头添加、尾添加、指定下标输入

// 添加单个元素
//尾添加
void add(int e, int arr[], int s) {arr[s] = e;
}//指定位置添加
void addByI(int index, int arr[], int s, int sta) {if (index < 0 || index >= s) {printf("输入的下标不在合理范围内\n");return;}if (sta == NULL) {printf("请输入元素\n");return;}for (int i = s; i > index; i--) {arr[i] = arr[i - 1];}arr[index] = sta;
}

2)按数量区分:添加单个、添加另一个数组/数据结构中的所有元素

2.查找元素

1)根据下标查找:返回元素

// 根据下标查找元素
//函数结构: 返回值类型 函数名 参数列表 : 不要相信参数 一定要验证处理
int get(int index, int arr[], int s) {if (index < 0 || index >= s) {printf("索引的位置不合法");return NULL;}return arr[index];
}

2)根据区间下标查找

3)根据元素查找:返回下标

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

3.删除元素

1)根据下标删除、根据区间下标删除、根据集合删除

// 删除
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;
}

2)根据元素删除、删除多个

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;
}

4.替换元素

1)根据下标替换

//修改某个位置的元素
int change(int e, int arr[], int s, int sta) {if (e < 0 || e >= s) {printf("输入的下标不在合理范围内\n");return 0;}if (sta == NULL) {printf("请输入元素\n");}arr[e] = sta;
}

2)根据元素替换、多个替换

//修改指定元素
int changeB(int e, int arr[], int s, int sta) {for (int i = 0; i < s; i++) {if (arr[i] == e) {arr[i] == sta;}}return 0;
}

5.整体实现

#include <stdio.h>
#include <stdlib.h>
// 使用常规数组实现
#define len 100// 添加单个元素
void add(int e, int arr[], int s) {arr[s] = e;
}void addByI(int index, int arr[], int s, int sta) {if (index < 0 || index >= s) {printf("输入的下标不在合理范围内\n");return;}if (sta == NULL) {printf("请输入元素\n");return;}for (int i = s; i > index; i--) {arr[i] = arr[i - 1];}arr[index] = sta;
}// 删除
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;
}//修改某个位置的元素
int change(int e, int arr[], int s, int sta) {if (e < 0 || e >= s) {printf("输入的下标不在合理范围内\n");return 0;}if (sta == NULL) {printf("请输入元素\n");}arr[e] = sta;
}//修改指定元素
int changeB(int e, int arr[], int s, int sta) {for (int i = 0; i < s; i++) {if (arr[i] == e) {arr[i] == sta;}}return 0;
}int main() {char str[50] = "(2*5)+1.2+3.4*3"; // 解析字符串的题
//将这个算式 计算出结果
// 通过 + 号 区分裁切出两个字符串
// 将前后两个字符串 转为 数字类型变量
// 根据运算符判断 是什么运算int arr[len] = {1, 2, 3, 4, 5, 6, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 2, 1};int size = 19;while (1) {printf("添加单个元素到末尾->101\n");printf("添加单个元素到指定位置->102\n");printf("根据下标删除单个元素->201\n");printf("根据元素删除->202\n");printf("根据下标查找单个元素->301\n");printf("根据元素查找下标->302\n");printf("修改指定位置元素->401\n");printf("批量修改指定元素->402\n");printf("输入999结束程序\n");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 == 102) {int index = 0;int sta = NULL;printf("请输入一个要添加的元素:\n");scanf("%d", &sta);printf("请输入一个下标:\n");scanf("%d", &index);addByI(index, arr, size, sta);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 indx = indexOf(e, arr, size);if (indx >= 0) {printf("元素存在,当前位置是:%d\n", indx);} else {printf("元素不存在\n");}} else if (id == 401) {int sta = NULL;int e = 0;printf("请输入需要修改的元素的下标:\n");scanf("%d", &e);printf("请输入要修改为的元素:\n");scanf("%d", &sta);change(e, arr, size, sta);} else if (id == 402) {int e = 0;int sta = 0;printf("请输入需要修改的元素:\n");scanf("%d", &e);printf("请输入要修改为的元素:\n");change(e, arr, size, sta);scanf("%d", &sta);} else if (id == 999) {exit(999);} else {printf("输入不合法,请输入正确的编号~\n");}printf("现有的元素:");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");}
}

二、排序算法:冒泡、选择、快速排序

暂略,写法可参考我之前发的Java数组专题里的描述(有时间会补)

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

相关文章:

  • 洛谷 P1054 [NOIP 2005 提高组] 等价表达式
  • 【左程云算法020】递归和master公式
  • php 怎么做 网站 图片福州外语外贸学院
  • 网站点击率东莞网站建设的公司
  • 【Linux】线程的互斥
  • 第三十九天:斐波那契数列
  • JAVA中用到的线程调度算法是什么?
  • 网站开发是无形资产如何在家里做网站
  • PySide6 打印或显示系统支持字体(QFontDataBase)
  • 网站开发框架怎么写wordpress前端会员中心开发教程
  • redis-zset数据类型的常见指令(sorted set)
  • 触摸未来2025.10.04:当神经网络拥有了内在记忆……
  • 生成对抗网络(GANs)深度解析:从原理、变体到前沿应用
  • 项目1:get_rga_thread线程和low_camera_venc_thread线程获取低分辨率VENC码流数据
  • 哪个网站做简历好musik wordpress视频
  • 【Linux】Linux管道与进程池深度解析:从原理到实战
  • Kotlin 协程之 Flow 操作符大全
  • python高级01——linux基础命令
  • 发帖那个网站好 做装修的怎么优化关键词排名优化
  • 分类信息网站建设价格西安公司注册网站
  • 数据要素X_第三批“数据要素×”典型案例——科技创新领域【附全文阅读】
  • 安装nginx时,yum 不从stable源安装
  • ui做标注的网站平面设计素材怎么找
  • 向量数据库的几个核心概念
  • 设计方案的步骤seo学习网站
  • 常熟网站制作设计长沙房产
  • 【OpenCV】图像处理入门:从基础到实战技巧
  • 站群系统破解版急切网头像在线制作图片
  • 快速排序的深入优化探讨
  • HTTP~