c语言数组的操作

时间:2023-03-09 04:09:32
c语言数组的操作
 #include<stdio.h>
#include<malloc.h>
#include<stdlib.h>//exit() struct Arr//定义了一个数据类型,数据类型名字Arr
{ int *pbase;//基地址指针
int lenth;//数组长度
int cent;//数组实际大小
//int increment;//增战因子
};
void init_arr(struct Arr *array, int lenth);
bool append_arr(struct Arr *array,int data);
bool delete_arr(struct Arr *array,int pos);
bool insert_arr(struct Arr *array,int data,int pos);//插入
void show_arr(struct Arr *array);
bool is_empty(struct Arr *array);
bool is_full(struct Arr *array);
int get();
bool inversion(struct Arr *array);
void sort_bubble(struct Arr *array);//冒泡
void sort_insert(struct Arr *array);//插入排序 int main()
{
struct Arr arr;
init_arr(&arr,);
printf("%d\n",arr.cent);
show_arr(&arr);
if(append_arr(&arr,)&&append_arr(&arr,)&&append_arr(&arr,)&&append_arr(&arr,)&& printf("%d\n",arr.cent))
{
printf("插入成功\n");
} show_arr(&arr);
insert_arr(&arr,,);
show_arr(&arr);
delete_arr(&arr,);
show_arr(&arr);
inversion(&arr);
show_arr(&arr);
sort_bubble(&arr);
show_arr(&arr);
sort_insert(&arr);
show_arr(&arr);
return ;
} void init_arr(struct Arr *array,int lenth)//初始化
{
array->lenth=;
array->pbase=(int *)malloc(sizeof(int)*lenth);
if(NULL==array->pbase)
{
printf("动态内存分配失败\n");
exit(-);
}
else
{
array->lenth=lenth;
array->cent=;
}
} void show_arr(struct Arr *array)//展示数组
{
if(is_empty(array))
{
printf("数组为空\n");
}
else
{
int i;
for(i=;i<array->cent;i++)
{
printf("%d ",array->pbase[i]);
}
printf("\n");
}
} bool is_empty(struct Arr *array)//判断是否为空
{
if(array->cent==)
return true;
else
return false;
} bool append_arr(struct Arr *array,int data)//在后面插入
{
if(is_full(array))
return false;
else
{
array->pbase[array->cent++]=data;
}
return true;
} bool is_full(struct Arr *array)//判断是否满
{
if(array->cent==array->lenth)
return true;
else
return false;
} bool insert_arr(struct Arr *array,int data,int pos)//数组中插入
{
if(pos>&&pos<=array->cent)
{
if(is_full(array))
{
printf("数组已满,无法插入\n");
return false;
}
else
{
for(int i=array->cent;i>=pos;i--)
array->pbase[i] = array->pbase[i-];
array->pbase[pos-]=data;
array->cent++;
return true;
}
}
else
{
printf("pos越界\n");
return false;
} } bool delete_arr(struct Arr *array,int pos)//删除摸个位置上的元素
{
if(is_empty(array))
{
printf("数组为空\n");
return false;
}
if(pos>&&pos<array->cent)
{
int vol=array->pbase[pos-];
for(int i=pos;i<array->cent;i++)
{
array->pbase[i-]=array->pbase[i];
}
array->cent--;
printf("数据已删除\n");
printf("删除的数据:%d\n",vol);
return true;
}
else
{
printf("pos越界\n");
return false;
} } bool inversion(struct Arr *array)//数组反转
{
int i,t,l;
/*l=array->cent/2;
for(i=0;i<l;i++)
{
if(array->pbase[i]!=array->pbase[array->cent-1-i])
{
t=array->pbase[i];
array->pbase[i]=array->pbase[array->cent-1-i];
array->pbase[array->cent-1-i]=t;
}
}*/
l=array->cent-;
i=;
while(i<l)
{
if(array->pbase[i]!=array->pbase[l])
{
t=array->pbase[i];
array->pbase[i]=array->pbase[l];
array->pbase[l]=t;
}
i++;
l--;
}
return true;
} void sort_bubble(struct Arr *array)
{
int i,j,l,t;
l=array->cent;
for(i=;i<l-;i++)
for(j=i+;j<l;j++)
{
if(array->pbase[i]>array->pbase[j])
{
t=array->pbase[i];
array->pbase[i]=array->pbase[j];
array->pbase[j]=t;
}
}
} void sort_insert(struct Arr *array)
{
int i,j,l,t;
l=array->cent;
for(i=;i<l;i++)
for(j=i-;j>=;j--)
{
t=array->pbase[i];
if(array->pbase[i]<array->pbase[j])
{
for(int p=i;p>j;p--)
array->pbase[p] = array->pbase[p-];
array->pbase[j]=t;
}
}
}

相关文章