数据结构之数组实现
2015-01-24 23:03
417 查看
//模拟数组 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //定义了一个数据类型,该数据类型的名字叫struct ,3个成员 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); bool delete_arr(struct Arr * pArr, int pos, int * pVal); int get(); bool is_empty(struct Arr *); bool if_full(struct Arr *); void sort_arr(struct Arr * pArr); void show_arr(struct Arr *); 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); append_arr(&arr, 4); if( delete_arr(&arr, 5, &val) ) printf("您删除的元素是%d删除成功!\n",val); else printf("删除失败!\n"); // append_arr(&arr, 2); // append_arr(&arr, 3); // append_arr(&arr, 4); // append_arr(&arr, 5); // append_arr(&arr, 6); // insert_arr(&arr,5,99); // show_arr(&arr); // insert_arr(&arr,1,66); show_arr(&arr); inversion_arr(&arr); printf("倒置之后是:\n"); show_arr(&arr); sort_arr(&arr); show_arr(&arr); // printf("%d\n", arr.len); return 0; } void init_arr(struct Arr * pArr, int length) { pArr->pBase = (int *)malloc(sizeof(int) * length); if(NULL == pArr->pBase) { printf("动态内存分配失败!\n"); exit(-1);//终止整个程序 } else { pArr->len = length; pArr->cnt = 0; } return; } bool is_full(struct Arr * pArr) { if(pArr->cnt == pArr->len) return true; else return false; } bool is_empty(struct Arr * pArr) { if(0 == pArr->cnt) return true; else return false; } void show_arr(struct Arr * pArr) { if(is_empty(pArr)) { printf("数组为空!\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) { //满时返回false if( is_full(pArr) ) return false; //不满时追加 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 true; } 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, t; 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++)
- C数据结构之顺序栈(数组实现2)
- 数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树
- 数据结构:用数组实现的定容队列
- 数据结构之数组的增删改查-java实现
- 数据结构——图的数组实现(邻接矩阵表示法)
- C语言 数组的顺序表示与实现 数据结构
- 看数据结构写代码(19) 数组的实现
- 数据结构之数组16定义及实现
- 数据结构之数组实现哈希表应用总结篇
- VB.NET用Marshal.PtrToStructure 方法实现数据在数组和结构间复制
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- C 数据结构使用数组和链表实现栈
- (3)数据结构——栈(数组)实现
- 数据结构基础(1)--数组C语言实现--动态内存分配
- (7)数据结构——循环队列(数组)实现
- 数据结构之stack,queue的数组与链表实现
- 数据结构之数组实现栈结构
- 用数组实现js中的堆栈 或者队列数据结构
- 数据结构与算法-----队列-使用数组(顺序结构)实现