顺序表的删除上篇只是按位置删除,按位置删除只要把删除的位置的后面的数据向前移动,本篇按值删除,对数组中的每个数据顺序比较,查找到了就记录下标,缺点是数组中的每个数据都应该不相同,对后面相同的数据没有做到删除的效果,只是针对不同数据的数组进行删除。
#include <stdio.h>
#define N 50
int a[N]={0};
void CreateArr(int *a, int len) //创建顺序表
{
printf("请输入%d个整型数据:\n",len);
for(int i=0; i<len; i++)
scanf("%d",&a[i]);
printf("数据输入完毕.\n");
}
void PrintArr(int *a, int len) //输出顺序表
{
printf("输出数据.\n");
for(int j=0; j<len; j++)
printf("%-3d",a[j]);
printf("\n");
}
int DeleteElement(int *a, int len, int val) //按值删除
{
int i, j, key;
for(i=0; i<len; i++) //在数组a中逐个按顺序查找
{
if(val == a[i])
{
key = i; //查找到相等的就记录下标
for(j=key; j<len; j++) //从记录的下标开始向前移动
{
a[j]=a[j+1];
}
return len-1; //删除了一个数据,数组个数减少1
}
}
if(i==len)
{
printf("你要删除的数据不存在\n");
return len;
}
}
void main()
{
int n;
int val;
printf("请问你想输入几个整型数据.\n");
scanf("%d", &n);
CreateArr(a, n);
PrintArr(a, n);
printf("请输入你要删除的数据:\n");
scanf("%d", &val);
n=DeleteElement(a, n, val);
PrintArr(a, n);
}