C语言中怎样实现对数组数据的删除、修改?
想要删除/修改结构体中的一组数据,比如要删除第i组数据,采用第i项后面的数据都向前移位的方法覆盖第i项数据,高手帮忙写出这个程序来,解释要清楚点啊,我菜鸟一个,谢谢。分不...
想要删除/修改结构体中的一组数据,比如要删除第i组数据,采用第i项后面的数据都向前移位的方法覆盖第i项数据,高手帮忙写出这个程序来,解释要清楚点啊,我菜鸟一个,谢谢。
分不多,希望高手无私帮助啊,感谢!!!
2楼的朋友,程序前几句有不懂的,能不能解释一下啊?我菜。。。 展开
分不多,希望高手无私帮助啊,感谢!!!
2楼的朋友,程序前几句有不懂的,能不能解释一下啊?我菜。。。 展开
8个回答
展开全部
#include <stdio.h>
// 删除长度为len的数组dat中索引为idx的元素。
void remove(int *dat, int *len, int idx)
{
(*len)--;
if (idx < 0 || idx >= *len)
return;
for (int i = idx; i < *len; i++)
dat[i] = dat[i+1];
}
void output(int *dat, int len)
{
for (int i = 0; i < len; i++)
printf("%d ", dat[i]);
printf("\n");
}
int main()
{
int a[10]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, len = 10;
remove(a, &len, 5);
output(a, len);
remove(a, &len, 2);
output(a, len);
return 0;
}
展开全部
#include<stdio.h>
typedef struct Node{
int a,b;
}node;
node c[100];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//设置数据
void remove(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d%d%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) remove();
else if(m==4) print();
}
}
typedef struct Node{
int a,b;
}node;
node c[100];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//设置数据
void remove(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d%d%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) remove();
else if(m==4) print();
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
typedef struct Node{
int a,b;
}node;
node c[100];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//设置数据
void remove(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d%d%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) remove();
else if(m==4) print();
}
}
typedef struct Node{
int a,b;
}node;
node c[100];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//设置数据
void remove(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d%d%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) remove();
else if(m==4) print();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用数组名加下标进行修改。
删除是删不了的,你可以约定一个值是无效的,然后修改成那个无效值当做删除
删除是删不了的,你可以约定一个值是无效的,然后修改成那个无效值当做删除
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过数组的下标定位到需要删除修改的元素,即可完成对数据的删除,修改
eg:一个4*4的二维数组a[4][4],先要修改第一行第二个数据的话,通过下标找到该数据的为a[0][1],直接对a[0][1]赋值即可完成修改删除,
当然如果数组元素的类型比较复杂的话,按照该数据类型的语法法则进行赋值,修改,原理是一样的.
eg:一个4*4的二维数组a[4][4],先要修改第一行第二个数据的话,通过下标找到该数据的为a[0][1],直接对a[0][1]赋值即可完成修改删除,
当然如果数组元素的类型比较复杂的话,按照该数据类型的语法法则进行赋值,修改,原理是一样的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询