对数据结构线性操作的数组进行的一系列的操作。
这个都是对数组进行的一些简单操作。其中算法的实现,排序算法只是实现了一种,也只有升序。只进过了简单测试,没有做专业的测试,是可以实现的。下面是具体代码:
#include <stdio.h>
#include <malloc.h>//添加malloc函数
#include <stdlib.h>//添加exit函数
#include <stdbool.h>//添加bool
typedef struct Arr
{
int * pBase;//存储的是数组第一个元素的地址
int len; //数组所能容纳的最大元素的个数
int cnt; //当前数组有效元素的个数
int increment;//自动增加因子
}ARR;
void init_arr(ARR * pArr,int length);//数组初始化数组地址和长度
bool append_arr(ARR * pArr,int val);//追加
bool insert_arr(ARR * pArr,int pos,int val);//插入 pos插入的位置
bool delete_arr(ARR * pArr,int pos,int *pval);//删除 pos删除的位置
int get(ARR * pArr,int pos);//获取pos的位置
bool is_empty(ARR * pArr);//判断是否为空
bool is_full(ARR * pArr);//判断是否满了
void sort_arr(ARR * pArr);//数组排序
void show_arr(ARR* pArr);//数组显示
void inversion_arr(ARR * pArr);//倒置
int main()
{
ARR arr;
int L = 6;
int val;
init_arr(&arr,L);
show_arr(&arr);
for(int i = 0; i < 3;++i)
{
append_arr(&arr,i);
}
show_arr(&arr);
insert_arr(&arr,1,9);
insert_arr(&arr,1,8);
insert_arr(&arr,1,7);
insert_arr(&arr,1,6);
show_arr(&arr);
delete_arr(&arr,1,&val);
printf("删除的数为:%d\n",val);
delete_arr(&arr,1,&val);
printf("删除的数为:%d\n",val);
show_arr(&arr);
printf("你获取的数为:%d\n",get(&arr,1));
inversion_arr(&arr);
show_arr(&arr);
printf("排序\n");
sort_arr(&arr);
show_arr(&arr);
return 0;
}
void sort_arr(ARR * pArr)//排序,先实现一个,以后单独讨论
{
int k = 0;
for(int i = 0; i < pArr -> cnt;++i)
{
for(int j = i + 1;j < pArr -> cnt; ++j)
{
if(pArr -> pBase[i] > pArr -> pBase[j])
{
k = pArr -> pBase[i];
pArr -> pBase[i] = pArr -> pBase[j];
pArr -> pBase[j] = k;
}
}
}
}
void inversion_arr(ARR * pArr)//倒置
{
int i = 0,j = pArr -> cnt -1,k = 0;
if(is_empty(pArr))
{
printf("数组为空\n");
exit(-1);
}
while(i < j)
{
k = pArr -> pBase[i];
pArr -> pBase[i] = pArr -> pBase[j];
pArr -> pBase[j] = k;
i++;j--;
}
}
int get(ARR * pArr,int pos)//获取pos的位置
{
if(pos < 0 || pos > pArr -> cnt )
{
printf("你输入的范围错误!\n");
}else
{
return (pArr -> pBase[pos]);
}
}
bool delete_arr(ARR * pArr,int pos,int *pval)//删除 pos删除的位置
{
if(is_empty(pArr))
{
printf("数组为空,不可以在删除了。\n");
return false;
}else if(pos < 0 || pos > pArr -> cnt)
{
printf("删除的数据不在范围。\n");
}else
{
*pval = pArr -> pBase[pos];
for(int i = pos;i < pArr -> cnt; ++i)
{
pArr -> pBase[i] = pArr -> pBase[i + 1];
}
(pArr -> cnt)--;
return true;
}
}
bool insert_arr(ARR * pArr,int pos,int val)//插入 pos插入的位置
{
if(is_full(pArr))
{
printf("没有位置可以插入\n");
return false;
}else if(pos < 0)
{
printf("插入的位置有误\n");
return false;
}else
{
for(int i = pArr -> cnt;i >= pos;--i)
{
pArr -> pBase[i] = pArr -> pBase[i-1];
}
(pArr -> cnt) ++;
pArr -> pBase[pos] = val;
return true;
}
}
bool is_full(ARR * pArr)
{
if(pArr -> cnt == pArr -> len)
{
return true;
}else
{
return false;
}
}
bool append_arr(ARR * pArr,int val)
{
if(is_full(pArr))
{
printf("数组已满!\n");
return false;
}else
{
pArr -> pBase[pArr -> cnt] = val;
(pArr -> cnt) ++;
return true;
}
}
void init_arr(ARR* pArr,int length)
{
if(length < 0)
{
printf("输出有误!\n");
exit(-1);
}
else
{
pArr -> len = length;
pArr -> cnt = 0;
pArr -> pBase = (int *)malloc(sizeof(int)*length);
}
return;
}
bool is_empty(ARR * pArr)
{
if(pArr -> cnt == 0)
{
return true;
}else
{
return false;
}
}
void show_arr(ARR* pArr)
{
if(is_empty(pArr))
{
printf("数组为空\n");
}
else
{
for(int i = 0;i < pArr -> cnt;++i)
{
printf("%d\n",pArr -> pBase[i]);
}
}
}
执行结果: