简单模拟ArrayList的一些方法
2012-07-28 22:54
260 查看
#include <stdio.h> #include <malloc.h> struct Arr{ int * pBase;//存储的是数组的第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt;//当前数组有效元素的个数 }; void init_arr(struct Arr *,int);//初始化 void append_arr(struct Arr *);//追加 void insert_arr(struct Arr *);//插入 void delete_arr(struct Arr *);//删除 int get(); bool is_empty(struct Arr *);//判断是否为空 bool is_full(struct Arr *);//判断是否数组满 void sort_arr();//对数组进行排序 void show_arr(struct Arr *);//打印数组元素 void inversion_arr(); //数组倒序 int main(){ struct Arr arr; init_arr(&arr,6); append_arr(&arr); append_arr(&arr); append_arr(&arr); show_arr(&arr); delete_arr(&arr); show_arr(&arr); insert_arr(&arr); show_arr(&arr); return 0; } //初始化 void init_arr(struct Arr * pArr, int length){ pArr->pBase = (int *)malloc(length * sizeof(struct Arr) ); if(NULL == pArr->pBase){ printf("数组初始化失败.\n"); exit(-1); } pArr->len = length; pArr->cnt= 0; } //打印 void show_arr(struct Arr * pArr){ if(!is_empty(pArr)){ printf("\n共有%d个元素\n",pArr->cnt); int i; for(i=0; i<pArr->cnt; i++){ printf("第%d个元素:%d\n",i+1,*(pArr->pBase+i) ); } return ; } printf("数组为空"); } //判断是否为空 bool is_empty(struct Arr * pArr){ if(NULL == pArr->pBase || pArr->cnt == 0){ return true; } return false; } //插入 void append_arr(struct Arr * pArr){ int temp; printf("请输入元素:"); scanf("%d",&temp); if( is_full(pArr) ){ printf("当前数组已满,不能插入\n"); return; }else{ *(pArr->pBase + pArr->cnt)=temp; } pArr->cnt++; } //在指定的位置插入元素 void insert_arr(struct Arr * pArr){ if(is_full(pArr)){ printf("当前数组已满,不能插入\n"); return ; } printf("当前共有元素%d个\n",pArr->cnt); printf("\n请输入要插入为第几个元素,元素值:"); int pos,val; scanf("%d %d",&pos,&val); while(pos <=0 || pos > (pArr->cnt+1) ){//因为可以插入到最后一个,故加1 printf("对不起,您输入的元素位数超过界限,请重新输入:"); scanf("%d",&pos); } int i; for(i=pArr->cnt; i>pos-1; i--){//进行数组的移动 *(pArr->pBase+i)=*(pArr->pBase+i-1); } *(pArr->pBase+pos-1)=val;//进行插入 pArr->cnt++; } //删除 void delete_arr(struct Arr * pArr){ if(is_empty(pArr)){ printf("当前元素为空,不能删除\n"); return ; } printf("当前共有元素%d个\n",pArr->cnt); printf("\n请输入要删除第几个元素:"); int index; scanf("%d",&index); while(index <=0 || index > pArr->cnt){ printf("对不起,您输入的元素位数超过界限,请重新输入:"); scanf("%d",&index); } int i; for(i= index-1; i<pArr->cnt-1; i++){ *(pArr->pBase+i)=*(pArr->pBase+i+1); } pArr->cnt--; } //判断是否满 bool is_full(struct Arr * pArr){ if( is_empty(pArr) ){ return false; } if(pArr->cnt == pArr->len) { return true; } return false; }
![](http://my.csdn.net/uploads/201207/28/1343487858_4649.jpg)
相关文章推荐
- java用数组模拟实现ArrayList以及一些常用方法实现
- 数组多重筛选条件排序方法,外加一些简单常用的数组方法
- NSObject一些比较常用的方法和简单的反射
- Vue实例的一些简单方法
- 工作之余,整理了一下平时处理数据的一些常用的,简单的方法。希望对学习JAVA的朋友有点帮助
- 简单的HTML中常用的一些特效方法
- 用VC6模拟点击图片按钮最简单的方法
- jQuery 一些简单常用方法
- 编写Java程序,模拟简单的计算器。 定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。 编写构造方法,用于初始化n1和n2,再为该类定义 加(addition)、 减(su
- 简单模拟ArrayList-迭代器设计模式
- 微信使用测试号简单写的一些方法测试供大家评论(里面的很多方法都是本人亲测的)
- ios设备触发虚拟键盘输入后position:fixed 无效的一些简单另类的解决方法。
- 【练习题】构造方法 编写Java程序,模拟简单的计算器。
- 一些简单的分析RTSP、RTP/RTCP的方法和工具
- 对象数组与ArrayList互转的简单方法[摘录]
- jquery项目中一些比较常用的简单方法
- win7系统中常见的一些小问题和解决方法简单整理
- qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径(最简单的方法是保持一样的安装路径,最方便的办法是设置qt.conf文件)
- 【知了堂学习笔记】Java中static关键字的一些简单使用方法
- JS简单模拟触发按钮点击功能的方法