⑴ 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;
}
如有問題,點擊頭像聯系我