C语言版
ArrayList.h
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
#include"ArrayList.h"
struct Arr {
int *pBase;//数组首元素地址
int len;//数组最大长度
int cnt;//数组有效个数
};
void init_arr(struct Arr *pArr,int length);//数组初始化
int append_arr(struct Arr *pArr,int val);//元素添加
int insert_arr(struct Arr *pArr,int pos,int val);//元素插入
int delete_arr(struct Arr *pArr,int pos,int *pval);//元素删除
int get(struct Arr *pArr,int pos);//元素获取
int is_empty(struct Arr *pArr);/*判空*/
int is_full(struct Arr *pArr);/*判满*/
void sort_arr(struct Arr *pArr);//排序
void show_arr(struct Arr *pArr);//输出元素
void inversion_arr(struct Arr *pArr);//倒置数组
#endif ARRAYLIST_H
ArrayList.c
#include<stdio.h>
#include"ArrayList.h"
#include<malloc.h>
void init_arr(struct Arr *pArr,int length)
{
pArr->pBase = (int *)malloc(length*sizeof(int));
if(NULL ==pArr->pBase)
{
printf("malloc err!");
exit(-1);
}else
{
pArr->len=length;
pArr->cnt=0;
}
return;
}
void show_arr(struct Arr *pArr)
{
int i=0;
if(is_empty(pArr))
{
printf("array is empty!\n");
}else
{
for(i=0;i<pArr->cnt;i++)
{
printf("%d ",pArr->pBase[i]);
}
}
return;
}
int append_arr(struct Arr *pArr,int val)
{
if(is_full(pArr))
{
printf("array is full;");
return 0;
}else
{
(pArr->pBase)[pArr->cnt] = val;
(pArr->cnt)++;
return 1;
}
}
int insert_arr(struct Arr *pArr,int pos,int val)//pos start form 1
{
int i=0;
if(is_full(pArr))
{
printf("insert err!");
return 0;
}else if(pos<1 || pos>pArr->cnt+1 )
{
printf("insert err!");
return 0;
}
for(i=pArr->cnt-1;i>=pos-1;i--)
{
pArr->pBase[i+1] = pArr->pBase[i];
}
pArr->pBase[pos-1]= val;
pArr->cnt++;
}
int delete_arr(struct Arr *pArr,int pos,int *pval)
{
int i=0;
*pval = pArr->pBase[pos-1];
if(is_empty(pArr))
{
printf("array is empty!");
return 0;
}else if(pos<1 || pos>pArr->cnt)
{
printf("delete err!");
return 0;
}
for(i=pos;i<pArr->cnt;i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt-1;
}
int get(struct Arr *pArr,int pos)
{
return pArr->pBase[pos-1];
}
int is_empty(struct Arr *pArr)
{
if(pArr->cnt==0)
{
return 1;
}else
{
return 0;
}
}
int is_full(struct Arr *pArr)
{
if(pArr->cnt==pArr->len)
{
return 1;
}else
{
return 0;
}
}
void sort_arr(struct Arr *pArr)
{
int i,j;
for(i=0;i<(pArr->cnt)-1;i++)
{
for(j=0;j<(pArr->cnt)-1-i;j++)
{
if((pArr->pBase[j]) >(pArr->pBase[j+1]))
{
pArr->pBase[j] = pArr->pBase[j] ^pArr->pBase[j+1];
pArr->pBase[j+1] = pArr->pBase[j] ^pArr->pBase[j+1];
pArr->pBase[j] = pArr->pBase[j] ^pArr->pBase[j+1];
}
}
}
}
void inversion_arr(struct Arr *pArr)
{
int i=0;
int j=pArr->cnt-1;
while(i<j)
{
pArr->pBase[i]=pArr->pBase[i]^pArr->pBase[j];
pArr->pBase[j]=pArr->pBase[i]^pArr->pBase[j];
pArr->pBase[i]=pArr->pBase[i]^pArr->pBase[j];
i++;
j--;
}
}
main.c//自行测试
#include <stdio.h>
#include"ArrayList.h"
#include<malloc.h>
int main(void)
{
struct Arr arr;
int val;
init_arr(&arr,5);
append_arr(&arr,11);
append_arr(&arr,222);
append_arr(&arr,10);
append_arr(&arr,1);
// insert_arr(&arr,2,999);
// if(delete_arr(&arr,2,&val))
// {
// printf("you delete value is %d",val);
// }else
// {
// printf("delete err!");
// }
// printf("%d",get(&arr,2));
show_arr(&arr);
inversion_arr(&arr);
putchar(10);
show_arr(&arr);
return 0;
}
C++版
arraylist.h
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
#include<iostream>
using namespace std;
class ArrayList
{
public:
ArrayList(int length);//构造器
~ArrayList();//析构器
bool append(int val);//添加
bool insert(int pos,int val);//插入
bool delete_arr(int pos);//删除
bool isempty();//判空
bool isfull();//判满
void inversion();//倒置
void show();//输出
void sort();//排序
private:
int len;//数组最大长度
int cnt;//数组有效元素个数
int *pBase;//数组首元素地址
};
#endif // ARRAYLIST_H
arraylist.cpp
#include "arraylist.h"
#include<iostream>
ArrayList::ArrayList(int length)
{
pBase = new int[length];
if(pBase==NULL)
{
cout<<"new err"<<endl;
exit(-1);
}else
{
len=length;
cnt=0;
}
}
bool ArrayList::append(int val)
{
if(isfull())
{
printf(" array is full!");
return false;
}else
{
pBase[cnt] = val;
cnt++;
return true;
}
}
void ArrayList::show()
{
if(isempty())
{
printf("is empty");
}else
{
for(int i =0;i<cnt;i++)
{
cout<<" "<<pBase[i];
}
}
}
bool ArrayList::insert(int pos,int val)
{
if(isfull())
{
return false;
}
if(pos<1 || pos>cnt+1)
{
return false;
}
for(int i=cnt-1;i>=pos-1;i--)
{
pBase[i+1]=pBase[i];
}
pBase[pos-1]=val;
cnt++;
}
bool ArrayList::delete_arr(int pos)
{
if(isempty())
{
return false;
}else if(pos<1 || pos>cnt-1)
{
return false;
}
for(int i=pos;i<cnt;i++)
{
pBase[i-1]=pBase[i];
}
cnt--;
}
void ArrayList::inversion()
{
int i =0;
int j= cnt-1;
while(i<j)
{
pBase[i] = pBase[i]^pBase[j];
pBase[j] = pBase[i]^pBase[j];
pBase[i] = pBase[i]^pBase[j];
i++;
j--;
}
}
void ArrayList::sort()
{
for(int i=0;i<cnt-1;i++)
{
for(int j=0;j<cnt-i-1;j++)
{
if(pBase[j]>pBase[j+1])
{
pBase[j]=pBase[j]^pBase[j+1];
pBase[j+1]=pBase[j]^pBase[j+1];
pBase[j]=pBase[j]^pBase[j+1];
}
}
}
}
bool ArrayList::isfull()
{
if(cnt==len)
{
return true;
}else
{
return false;
}
}
bool ArrayList::isempty()
{
if(cnt==0)
{
return true;
}else
{
return false;
}
}
ArrayList::~ArrayList()
{
delete []pBase;
}
main.c
#include <iostream>
#include"arraylist.h"
using namespace std;
int main()
{
ArrayList arr = ArrayList(4);
arr.append(22);
arr.append(3);
arr.append(33);
arr.append(2);
arr.delete_arr(2);
arr.show();
return 0;
}