/*************************************************************************
> File Name: ArrayListtttttttt.c
> Author: fraze
> Mail: fraze700@gmail.com
> Created Time: Wed 10 Oct 2018 12:48:26 AM UTC
************************************************************************/
//写了一个数组,提供一些方法
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
struct Array//定义一个结构体array
{
int *pBase;
int cnt;
int len;
};
//下面是函数声明
void InitArr();
bool AppendArr();
bool InsetArr();
bool DeleteArr();
bool IsEmpty();
bool IsFull();
bool SortArr();
bool RevereArr();
void ShowArr();
void InitArr(struct Array *parr,int len ) //初始化数组,传入两个参数
{
parr->pBase = (int *)malloc(sizeof(int) * len);
if(NULL==parr->pBase)
{
printf("初始化失败\n");
exit(-1);
}
else
{
parr->cnt = 0;
parr->len=len;
printf("初始化成功\n");
}
return;
}
void ShowArr(struct Array *parr) //显示数组元素
{
if(IsEmpty(parr))
printf("数组为空\n");
else
{
for(int i=0;i<parr->cnt;++i)
{
printf("%d\n",parr->pBase[i]);
}
}
return;
}
bool AppendArr(struct Array *parr,int val) //给数组追加一个元素,需要两个实参,指针和值
{
if(IsFull(parr))
{
printf("数组已满,无法追加\n");
return false;
}
else
{
parr->pBase[parr->cnt] = val;
(parr->cnt)++;
}
return true;
}
bool InsetArr(struct Array *parr,int val,int pos) //在数组指定位置插入一个元素,pos为下标
{
int i; //i用来记录移动次数
if(IsFull)
printf("数组已满,无法插入参数");
return false;
if(pos>parr->cnt)
return false;
i = parr->cnt-pos;
int j = i; //j用来寻找插入位置
while(i)
{
parr->pBase[i+pos]=parr->pBase[i+pos-1];
i--;
}
parr->pBase[parr->cnt-j] = val;
(parr->cnt)++;
return true;
}
bool DeleteArr(struct Array *parr,int pos,int *val)//删除指定位置的一个元素
{
if(pos>=parr->cnt)
{
printf("该位置无元素可以删除\n");
return false;
}
*val=parr->pBase[pos];
for(int i=pos;i<parr->cnt-1;i++)
{
parr->pBase[i] = parr->pBase[i+1];
}
return true;
}
bool IsEmpty(struct Array *parr)//判断数组是否为空
{
if(parr->cnt==0)
return true;
else
return false;
}
bool IsFull(struct Array *parr)//判断函数书否为满
{
if(parr->cnt==parr->len)
return true;
else
return false;
}
bool SortArr(struct Array *parr)//数组进行排xu
{
int i;
int j;
int t=0;
for(i=0;i<parr->cnt;i++)
{
for(j=i+1;j<parr->cnt;j++)
{
if(parr->pBase[i]>parr->pBase[j])
{
t = parr->pBase[i];
parr->pBase[i] = parr->pBase[j];
parr->pBase[j] = t;
}
}
}
return true;
}
bool RevereArr(struct Array *parr)
{
int i = 0;
int j = parr->cnt-1;
int t=0;
while(i<j)
{
t=parr->pBase[i];
parr->pBase[i] = parr->pBase[j];
parr->pBase[j] = t;
i++;
j--;
}
printf("交换完成\n");
return true;
}
int main(void)
{
//主函数可以自己调用函数
}`
一种数组的实现
最新推荐文章于 2022-03-29 16:57:58 发布