当前位置:首页 » 编程语言 » c语言清除所有元素
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言清除所有元素

发布时间: 2022-11-02 23:30:17

c语言数组元素的删除

对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。

例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。

不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。

所以我的做法是在结构体里面定义一个标示符int flag。。。。

当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。

这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——
int i=5;
for(int j=i+1;a[j].flag==1;i++,j++)
{
a[i]=a[j];
/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */
}
a[i].flag=0;
/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */

⑵ C语言数组怎么删除一个区间的所有元素

#include"stdio.h"
intdel(int*arr,intn,ints,inte){
int*p=arr;
inti;
for(i=0;i<n;i++){
if(arr[i]>=s&&arr[i]<=e){
}
else{
*p=arr[i];
p++;
}
}
return(p-arr);
}
voidpt(int*arr,intn){
inti;
for(i=0;i<n;i++){
printf("%d",arr[i]);
}
printf(" ");
}
intmain(){
intarr[]={1,2,3,4,5,6,7,8,9};
pt(arr,9);
printf("AfterDelete ");
pt(arr,del(arr,9,2,6));
return0;
}

⑶ C语言,删除数组元素

void main()
{
int i,j,n;
int a[10];
int k=0; //记录删除数据的个数
printf("请输入需要删除的数:\n");
scanf("%d",&n);
printf("请输入10个元素的数组: \n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
if (a[i]==n)
{
for (j=0;i+j<9;j++)
a[i+j]=a[i+j+1];
k++;//删除数据的个数加1
a[10-k] = 0; //清除最后一个已经前移过的数据
}

for (i=0;i<10-k;i++)//输出剩余的数据,后面的数据为0代表已经被删除的无意义数据,不必再输出了。
printf("%5d",a[i]);
}

⑷ 急急急:如何用C语言清除数组中的所有元素

#include
/*头文件,他包含函数体用的函数如printf(),scanf()都在库函数stdio.h中,*/void
main()
for(i=0;i<=9;i++)
a[i]=i;/*数组初始化给数组赋值,

⑸ C语言 删除所有相同值的元素

#include <stdio.h>
#define N 1000
#define FLAG 0x80000000 /*特殊标记,用最小的负数表示*/
void main( )
{
int r[N], length, i, j;
scanf("%d", &length);
for(i = 0; i < length; i++)
scanf("%d", &r[i]);
for(i = 0; i < length - 1; i++)
{
if(r[i] != FLAG)
{
for(j = i + 1; j < length; j++)
if(r[j] == r[i]) r[j] = FLAG; /*遇到重复值,则先用特殊标记覆盖它*/
}
}
for(i = 0; r[i] != FLAG; i++); /*找到第一个特殊标记*/
for(j = i + 1; j < length;) /*删除数列中的特殊标记*/
{
if(r[j] != FLAG) r[i++] = r[j++];
else j++;
}
length = i; /*修改删除重复值后的数列的长度*/
for(i = 0; i < length; i++)
printf("%-4d", r[i]);
}

⑹ 在C语言中如何把数组清空

C语言貌似没有把数组清空的方法啊,或许你可以清除就把它赋值为0,这样在形式上实现了清楚,不然的话只有动态申请的内存可以释放。

⑺ c语言数组怎么清零

c语言不能对这个数组赋值,只能通过遍历数组达到给数组中每个元素赋值的目的。初始化的时候可以用inta[4]={0};这样给整个数组元素赋值为0,若想给已初始化的数组清零,也只能遍历数组。

在C语言中,所谓的“清空”,意思是“无视里面的数据”,而不是“让里面没有数据”。有时候可能需要把一个数组清零,意思是全部数据都用0填充,可以用库函数来实现。假设数组名为a,无论什么类型也无论几维都一样,可以写成memset(a,0,sizeof(a));

(7)c语言清除所有元素扩展阅读:

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。

⑻ 在C语言中如何把数组清空

有两种方法可以实现。为方便说明,定义整型数组a,并实现将a清空。inta[4]={1,2,3,4};1、通过数组遍历,逐个赋值为0。定义循环变量inti;for(i=0;i<4;i++)a[i]=0;该程序功能为遍历数组a,逐个将元素赋值为0,实现清空效果。2、借助内存赋值函数memset,整体赋值为0。void*memset(void*dst,intvalue,size_tsize);这个函数的功能为将src上,大小为size字节的数据赋值为value。需要注意的是,该函数赋值是以字节为单位的。调用该函数时需要引用头文件string.h,即#include<string.h>清空数组的代码为memset(a,0,sizeof(a));

⑼ C语言 清除栈中的所有元素ClearStack(struct SqStack * MyStack)

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#defineelemTypeint /*链栈元素数据类型*/
#defineSNODE_SIZEsizeof(structsNode) /*链栈结点空间大小*/

#definestatusint /*状态型变量*/
#defineOVERFLOW-1 /*内存溢出状态码*/
#defineERROR0 /*错误状态码*/
#defineOK1 /*正确状态码*/

/*链栈结点存储结构*/
typedefstructsNode{
elemTypedata;
structsNode*next;
}sNode,*sNodePtr;

/*链栈存储结构*/
typedefstructlinkStack{
sNodePtrtop;/*栈顶指针*/
}linkStack;

/*初始化*/
/*操作结果:构造一个带头结点的空链栈S*/
voidinitStack(linkStack*S){
S->top=(sNodePtr)malloc(SNODE_SIZE);/*产生头结点,栈顶指针指向此头结点*/
if(!S->top)/*内存分配失败*/
exit(OVERFLOW);
S->top->next=NULL;
}

/*销毁*/
/*初始条件:链栈S已存在。操作结果:销毁链栈S*/
voiddestroyStack(linkStack*S){
sNodePtrp,q;

p=S->top;/*p指向S的头结点*/
while(p){
q=p->next;/*q指向p的下一个结点*/
free(p);/*回收p指向的结点*/
p=q;/*p移动到下一个结点*/
}/*直到没有下一个结点*/
}

/*清空*/
/*初始条件:链栈S已存在。操作结果:将S重置为空栈*/
voidclearStack(linkStack*S){
sNodePtrp,q;

p=S->top->next;/*p指向栈的第一个结点*/
while(p){
q=p->next;/*q指向p的下一个结点*/
free(p);/*回收p指向的结点*/
p=q;/*p移动到下一个结点*/
}/*直到没有下一个结点*/

S->top->next=NULL;
}

/*判断链栈是否为空*/
/*初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE*/
statusstackIsEmpty(linkStack*S){
returnS->top->next==NULL;
}

/*入栈*/
/*操作结果:在S的栈顶插入新的元素e*/
statuspush(linkStack*S,elemTypee){
sNodePtrp;

p=(sNodePtr)malloc(SNODE_SIZE);/*产生新结点*/
if(!p)/*内存分配失败*/
exit(OVERFLOW);

p->data=e;
p->next=S->top->next;/*将新结点链接到原栈顶*/
S->top->next=p;/*栈顶指向新结点*/
}

/*打印栈内容*/
/*初始条件:链栈S已存在。操作结果:当栈不为空时,打印栈内容并返回OK,否则返回ERROR*/
statusprintStack(linkStack*S){
sNodePtrp;

if(stackIsEmpty(S)){
puts("Thestackisempty!");
returnERROR;
}

p=S->top->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
putchar(' ');

returnOK;
}

intmain(void){
linkStackS;
elemTypee;
elemTypea,b,c,d;

a=1;b=2;c=3;d=4;

initStack(&S);
push(&S,a);
push(&S,b);
push(&S,c);
push(&S,d);

printf("S: ");
printStack(&S);
putchar(' ');


puts("Clearthestack");
clearStack(&S);
printf("S: ");
printStack(&S);

destroyStack(&S);

getch();/*屏幕暂留*/
return0;
}

如有问题,点击头像联系我