线性结构——连续存储【数组】的建立与实现
2015-12-09 20:50
483 查看
2015-12-09 20:49:18
#include<stdio.h> #include<malloc.h> #include<stdlib.h>//exit() struct Arr { int * pBase;//数组第一个元素的地址 int len;//长度 int cnt;//当前数组有效元素的个数 int increment;//自动增长因子 }; void init_arr(struct Arr *pArr,int length); bool append_arr(struct Arr *pArr,int val);//追加 bool insert_arr(struct Arr *pArr,int pos,int val);//pos从一开始 bool delete_arr(struct Arr *pArr,int pos,int *pVal); get get_arr(); bool is_empty(struct Arr*pArr); bool is_full(struct Arr *pArr); void sort_arr(struct Arr *pArr);//排序 void show_arr(struct Arr*pArr); void inversion_arr(struct Arr*pArr);//倒置 int main () { struct Arr arr; int val; init_arr(&arr,6); show_arr(&arr); append_arr(&arr,1); append_arr(&arr,2); append_arr(&arr,3); insert_arr(&arr,1,99); delete_arr(&arr,2,&val)//val返回被删除的值 inversion_arr(&arr); show_arr(&arr); sort_arr(&arr); show_arr(&arr); retirn 0; } void init_arr(struct Arr *pArr,int length) { pArr->pBase = (int *)malloc(sizof(int)*length); if (NULL==pArr->pBase) { printf("动态内存分配失败!\n"); exit (-1);//终止整个程序 } else { pArr->len=length; pArr->cnt=0; } return; } bool is _empty(struct Arr*pArr) { if(0==pArr->cnt) return true; else return false; } bool is_full(struct Arr *pArr) { if(pArr->cnt == pArr->len) return true; else return false; } void show_arr(struct Arr*pArr) { if(is_empty(pArr)) { printf("The arr is Empty!\n"); } else { for(int i=0;i<pArr->cnt;++i) printf("%d",pArr->pBase[i]); printf("\n"); } } bool append_arr(struct Arr *pArr,int val) { if(is_full(pArr)) return false; else { pArr->pBase[pArr->cnt]=val; (pArr->cnt)++; return true; } } bool insert_arr(struct Arr *pArr,int pos,int val) { int i ; if(is_full(pArr)) return false; if(pos<1||pos>pArr->cnt+1) return false; for(i=pArr->cnt-1;i>=pos-1;--i) { pArr->pBase[i+1]=pArr->pBase[i]; } pArr->pBase[pos-1]=val; pArr->cnt++; return true; } bool delete_arr(struct Arr *pArr,int pos,int *pVal) { int i; if(is_empty(pArr)) return false; if(pos<1||pos>pArr->cnt) return false; *pVal=pArr->pBase[pos-1]; for(i=pos;i<pArr->cnt;++i) { pArr->pBase[i-1]=pArr->pBase[i]) } pArr->cnt--; return; } void inversion_arr(struct Arr*pArr) { int i =0; int j = pArr->cnt-1; int t; while(i<j) { t=pArr->pBase[i]; pArr->pBase[i]=pArr->pBase[j]; pArr->pBase[j]=t; ++i;--j; } return; } void sort_arr(struct Arr *pArr) { int i,j; 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; } } } }
相关文章推荐
- C++ offsetof
- Visual Studio调试
- JavaScript的基本数据类型的父级
- Cocos2d-x 3.X里的坑(2)——安卓android APP应用名称的修改
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
- 应届生需提前学习的知识点及推荐书籍
- The import javax.servlet cannot be resolved解决办法
- oracle pl/sql 函数
- openwrt时间自动同步
- 实时股票分析系统的架构与算法
- 循环链表模板
- Stream API:filter、map和flatMap方法
- 安卓第二次实验解析
- ExpandListView 如何增加子项的onLongClick事件
- 2015广工校赛 I Stubird说这是水题
- transform的使用
- CF283E Cow Tennis Tournament
- MySQL分组排序查前N条数据
- 我的数学库
- 弱联通的定义