数组的增删改查
程序员文章站
2024-02-21 09:58:16
...
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//定义一个Arr数组结构体,有三个成员变量
struct Arr{
int * pBase;
int len;
int cnt;
};
//声明函数
void init_arr(struct Arr * pArr, int length);
bool append_arr(struct Arr * pArr,int val);
bool insert_arr(struct Arr * pArr,int pos, int val);
bool delete_arr(struct Arr * pArr,int pos, int* pVal);
bool get(struct Arr* pArr,int val);
bool is_empty(struct Arr * pArr);
bool is_full(struct Arr* pArr);
void sort_arr(struct Arr* pArr);
void show_arr(struct Arr * pArr);
void inversion_arr(struct Arr * pArr);
void quick_sort_arr(struct Arr* pArr,int left,int right);
int main(void){
struct Arr arr;
int val;
init_arr(&arr, 6);
//追加插入数据
append_arr(&arr,1);
append_arr(&arr,3);
append_arr(&arr,5);
append_arr(&arr,2);
append_arr(&arr,4);
printf("原数组:");
show_arr(&arr);
printf("排序后:");
sort_arr(&arr);
// quick_sort_arr(&arr,0,4);
show_arr(&arr);
printf("倒置后数组:");
inversion_arr(&arr);
show_arr(&arr);
if(delete_arr(&arr,1,&val)){
printf("删除 %d 成功\n", val);
}else{
printf("删除失败! \n");
}
show_arr(&arr);
return 0;
}
//初始化数组
void init_arr(struct Arr * pArr, int length){
pArr->pBase = (int *)malloc(sizeof(int)*length);
if(NULL == pArr->pBase){
printf("动态内存分配失败!\n");
exit(-1);
}else{
pArr->len = length;
pArr->cnt = 0;
}
}
//判断是否为NULL
bool is_empty(struct Arr * pArr){
if(0 == pArr->cnt){
return true;
}else{
return false;
}
}
//判断是否数组已满
bool is_full(struct Arr* pArr){
if(pArr->cnt == pArr->len){
return true;
}else{
return false;
}
}
//输出数组
void show_arr(struct Arr * pArr){
if(is_empty(pArr)){
printf("数组为空!\n");
}else{
for(int i = 0; i < pArr->cnt; i++){
printf("%d ",pArr->pBase[i]);
}
printf("\n");
}
}
//追加
bool append_arr(struct Arr* pArr, int val){
if(is_full(pArr)){
return false;
}else{
pArr->pBase[pArr->cnt] = val ;
(pArr->cnt)++;
return true;
}
}
//插入数据
bool insert_arr(struct Arr * pArr,int pos, int val){
int i;
if(is_full(pArr))
return false;
if(pos<1 || pos>pArr->cnt+1)
return false;
for(i = pArr->cnt-1; i >=pos-1; i--){
pArr->pBase[i+1] = pArr->pBase[i];
}
pArr->pBase[pos-1] = val;
return true ;
}
//删除数据
bool delete_arr(struct Arr * pArr,int pos, int* pVal){
int i;
if(is_empty(pArr))
return false;
if(pos<1 || pos>pArr->cnt)
return false;
*pVal = pArr->pBase[pos-1];
for(i = pos; i <= pArr->cnt; ++i){
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
return true ;
}
//转置数组
void inversion_arr(struct Arr * pArr){
int i;
int j = pArr->cnt-1;
while(i < j){
int k = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = k;
++i;
--j;
}
}
//排序
void sort_arr(struct Arr * pArr){
int i,j;
for(i=0;i<pArr->cnt;i++){
for(j=0;j<pArr->cnt-i-1;j++){
if(pArr->pBase[j+1] < pArr->pBase[j]){
int k = pArr->pBase[j+1];
pArr->pBase[j+1] = pArr->pBase[j];
pArr->pBase[j] = k;
}
}
}
}
//快速排序
void quick_sort_arr(struct Arr* pArr,int left,int right){
int i = left;
int j = right;
int key = pArr->pBase[i];
if( i > j){
return;
}
while(i<j){
while( i < j && pArr->pBase[j] > key ){
j--;
}
if( i < j){
pArr->pBase[i++] = pArr->pBase[j];
}
while( i < j && pArr->pBase[i] < key ){
i++;
}
if( i < j){
pArr->pBase[j--] = pArr->pBase[i];
}
}
pArr->pBase[i] = key;
quick_sort_arr(pArr,left,i-1);
quick_sort_arr(pArr,i+1,right);
}
上一篇: Swift基础语法学习-1.常量变量
下一篇: git的常用的几个命令