`
liukexiong
  • 浏览: 83640 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用c语言实现动态数组(类似于java中的Arraylist)

阅读更多
/*
 * 用c语言实现动态数组(类似于java中的Arraylist)
 */
#include<stdio.h>
#include<stdlib.h>

typedef struct str
{
 //保存元素的数组指针
 int *a;
 //当前元素的个数
 int index;
 //数组最多容纳的元素
 int max;
}st;

 /* 
 * 创建一个最多容纳num个元素的数组
 */
st *create(int num)
{
 st *ss=(st *)malloc(sizeof(st));
 if(ss==NULL)
 {
  printf("create fail!\n");
  exit(1);
 }
 ss->index=0;
 ss->max=num;
 ss->a=(int *)malloc(sizeof(int)*num);
 if(ss->a==NULL)
 {
  printf("create fail!\n");
  exit(1);
 }
 return ss;
}

 /*
 * 数组扩容并复制(默认扩大为原来的两倍)
 */
void createbigger(st *ss)
{
 int *p=(int *)malloc(sizeof(int)*(ss->max)*2);
 if(p==NULL)
 {
  printf("create fail!\n");
  exit(1);
 }
 int i;
 for(i=0;i<ss->index;i++)
 {
  *(p+i)=ss->a[i];
 }
 ss->index=i;
 ss->a=p;
 ss->max=ss->max*2;
}

 /*
 * 向动态数组中添加元素
 */
void addelement(st *ss,int value)
{
 //数组没有装满元素
 if(ss->index<ss->max)
 {
  ss->a[ss->index]=value;
  ss->index++;
 }
 //数组已经装满元素(此时应该扩容)
 else
 {
     createbigger(ss);
  ss->a[ss->index]=value;
  ss->index++;
 }
}

 int main()
{
 int num=3;
 st *src=create(num);
 addelement(src,1);
 addelement(src,2);
 addelement(src,3);
 printf("当前数组中的元素个数=%d,当前数组中最多可以容纳的元素个数=%d\n",src->index,src->max);
 addelement(src,4);
 printf("当前数组中的元素个数=%d,当前数组中最多可以容纳的元素个数=%d\n",src->index,src->max);
 return 0;
}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics