arrc.c功能实现
#include"arrc.h"
//创建一个数组
void arr_add(arr_list *first,int lenth)
{
first->ptoadd=(int *)malloc(sizeof(int)*lenth);
//创建一个动态内存并让ptoadd指向它
if(NULL==first->ptoadd)
//判断内存是否分配成功
{
printf("分配内存失败");
return;
}
first->len=lenth;
first->count=0;
return;
}
void arr_write(arr_list *first)
//使用scanf手动输入数组的值
{
int i=0;
int a=0;
printf("请输入数据:");
for(i=0;i<first->len;i++)
{
scanf("%d",&a);
first->ptoadd[i]=a;
first->count++;
}
return;
}
void arr_search(arr_list *first)
//遍历数组内的元素
{
int i=0;
for(i=0;i<first->count;i++)
{
printf("%d ",first->ptoadd[i]);
}
return;
}
bool arr_insert(arr_list *first,int val)
//尾插法输入数组元素
{
if(first->count==first->len)
//判断计数器是否已满
{
printf("数组已满!\n");
return false;
}
first->ptoadd[first->count]=val;
first->count++;
return true;
}
void insert_arr(arr_list *first,int pos,int val)
{
//在数组指定位置插入元素
//pos为第几个元素(按1到count来计算)或下标(按0到(count-1))
//本次按照第几个元素来计算
//val为要插入的值
int i=0;
if(first->count==first->len)
//判断数组是否已满
{
printf("数组已满,无法插入!\n");
return;
}
if(pos<1||pos>first->count+1)
//若数组不满便对pos进行判断,元素个数不可为0(不可小于1)
//数组为连续存储所以可插入有效位的后一位(即count+1)
//若pos是按照数组下标来计算的话就不能超过第count位了
{
printf("插入位置有误!\n");
return;
}
for(i=first->count;i>=pos;i--)
//此处写法多种多样
{
first->ptoadd[i]=first->ptoadd[i-1];
//一定要多思考、在吃透之前要多想!要多想!
}
first->ptoadd[pos-1]=val;
first->count++;
//插入之后计数器增加
return;
}
void arr_delete(arr_list *first,int pos)
//删除一个指定的pos(可以是元素位数也可以是下标)元素
{
int j=0;
int i=0;
if(pos<1||pos>first->count)
//此处pos按照个数来计算要删除的元素
//先判断输入的pos是否满足要求
{
printf("所要删除的元素不存在!");
return;
}
j=first->ptoadd[pos-1];
//提示所删除的元素(这是图省事的写法,最好创造一个指针)
printf("所删除的元素为%d\n",j);
for(i=pos-1;i<first->count-1;i++)
//pos-1将元素位数转换为了下标,count-1为最后一个元素的下标
//count-2为减完元素之后最后一个下标的位置,所以不能超过
{
//写法多种多样,千万不要停止思考,要多想!
first->ptoadd[i]=first->ptoadd[i+1];
}
first->count--;
return;
}
void inversion(arr_list *first)
//将数组反演、倒置
{
if(0==first->count)
{
printf("数组为空!");
return;
}
int i=0;
int j=first->count-1;
int t=0;
while(i<j)
{
t=first->ptoadd[i];
first->ptoadd[i]=first->ptoadd[j];
first->ptoadd[j]=t;
i++;
j--;
}
return;
}
void arr_sort(arr_list *first)
{
//排序
int i,j,t;
for(i=0;i<first->count-1;i++)
{
for(j=i+1;j<first->count;j++)
{
if(first->ptoadd[i]<first->ptoadd[j])
{
t=first->ptoadd[i];
first->ptoadd[i]=first->ptoadd[j];
first->ptoadd[j]=t;
}
}
}
return;
}
arrc.h头文件
#ifndef _arrc_h_
#define _arrc_h_
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct arr_list//ptoadd指针变量指向
//一个数组、len数组长度、count计数器
{
int *ptoadd;
int len;
int count;
}arr_list;
void arr_add(arr_list *first,int len);
void arr_write(arr_list *first);
void arr_search(arr_list *first);
bool arr_insert(arr_list *first,int val);
void insert_arr(arr_list *first,int pos,int val);
void arr_delete(arr_list *first,int pos);
void inversion(arr_list *first);
void arr_sort(arr_list *first);
#endif
arr.c函数调运
#include"arrc.h"
int main(int argc, const char *argv[])
{
arr_list first;
arr_add(&first,8);
//arr_write(&first);
arr_insert(&first,10);
arr_insert(&first,20);
arr_insert(&first,30);
arr_insert(&first,40);
arr_insert(&first,50);
arr_insert(&first,60);
arr_insert(&first,70);
insert_arr(&first,1,46);
//insert_arr(&first,9,46);
//arr_delete(&first,3);
//inversion(&first);
arr_sort(&first);
arr_search(&first);
return 0;
}