各位还在学C的小伙伴最近一定被数组,指针给烦到了,我列举了数组最常见的几种代码供大家参考!!!!
先上单个的;
排序,是数组最基础的工具,有了排序再插入和删除中可以简化程序
//排序
void bubblesort(int a[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j<n-i-1; j++)
if (a[j] > a[j+1]) {
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
//查找
int find(int a[], int x, int n) {
int i = 0;
while (i <n) {
if (x == a[i]) break;
i++;
}
return i;
}
//插入
void insert(int a[], int x, int n) {
int i,j;
for (i = 0; i < n && a[i] < x; i++);
for (j = n - 1; j >= i; j--)
a[j+1] = a[j];
a[i] = x;
}
//删除
int delete (int a[], int x, int n) {
int i, j;
int flag = 1;
for (i = 0; i < n &&a[i]!=x; i++);
if (i == n) flag = 0;
else {
for (j = i; j < n-1; j++)
a[j] = a[j + 1];
}
return flag;
}
在删除数字的模块如果单独应用没设么问题,但是如果全部连在一起写,就要考虑在引用的时候n已经在插入模块中改变了;
四个模块整体:
//关于二维数组的排序,插入,查找,删除
#include<stdio.h>
#define size 10
void output(int a[], int n) {
int i;
for (i = 0; i < n; i++)
printf("%-4d", a[i]);
}
void input(int a[], int n) {
int i;
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
}
//排序
void bubblesort(int a[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j<n-i-1; j++)
if (a[j] > a[j+1]) {
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
//查找
int find(int a[], int x, int n) {
int i = 0;
while (i <n) {
if (x == a[i]) break;
i++;
}
return i;
}
//插入
void insert(int a[], int x, int n) {
int i,j;
for (i = 0; i < n && a[i] < x; i++);
for (j = n - 1; j >= i; j--)
a[j+1] = a[j];
a[i] = x;
}
//删除
int delete (int a[], int x, int n) {
int i, j;
int flag = 1;
for (i = 0; i < n &&a[i]!=x; i++);
if (i == n) flag = 0;
else {
for (j = i; j < n-1; j++)
a[j] = a[j + 1];
}
return flag;
}
int main() {
int n, array[size],m,x;
do {
printf("请输入n,(1<=n<=%d)", size);
scanf_s("%d", &n);
} while (n<1 || n>size);
printf("请输入%d个数\n",n);
input( array, n);
bubblesort(array, n);
output(array,n);
printf("输入你想插入的数\n");
scanf_s("%d", &m);
insert(array, m, n);
output(array, n+1);
printf("请输入你想删除的数\n");
scanf_s("%d", &x);
if ( delete (array, x,n+1))
output(array, n);
return 0;
}