1 /**
2 *
3 * ArrayList c语言实现
4 *
5 *
6 * */
7
8
9 #include<stdlib.h>
10 #define MAX_SIZE 1000
11
12 typedef char Element;
13 typedef struct squence{
14 Element *items;
15 int listlen;
16 int len;
17 } sq;
18
19 //初始化表
20 void init(sq *l){
21 //分配内存空间
22 l->items= (Element *)malloc(MAX_SIZE * sizeof(Element));
23 if(!l->items) exit(0);
24 l->len=0;
25 l->listlen=MAX_SIZE;
26 }
27
28 //插入元素(往指定位置i插入元素)
29 void insertElem(sq *l,int i,Element e){
30 Element *base,*insertPtr,*p;
31 if(i<1 || i>l->len+1){
32 exit(0);
33 }
34
35 if(l->len>=l->listlen){
36 //扩展空间
37 base = (Element *)realloc(l->items,(l->listlen+10)*sizeof(Element));
38 l->items=base;
39 l->listlen=l->listlen+10;
40 }
41
42 insertPtr=&(l->items[i-1]);
43 for(p=&(l->items[l->len-1]);p>=insertPtr;p--){
44 *(p+1)=*p;
45 }
46
47 *insertPtr=e;
48 l->len++;
49 }
50
51 //删除元素
52 void delElem(sq *l,int i){
53 Element *delElem,*q;
54 if(i<1 || i>l->len)exit(0);
55 delElem=&(l->items[i-1]);
56 q=l->items+l->len-1;
57 //往前推移
58 for(++delElem;delElem<=q;++delElem){
59 *(delElem-1)=*delElem;
60 }
61 l->len--;
62 }