TA的每日心情 | 无聊 2016-9-11 15:26 |
---|
签到天数: 107 天 连续签到: 1 天 [LV.6]常住居民II 扫一扫,手机访问本帖
|
无聊写的一个
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- typedef struct Arr
- {
- int * pBase; //存放数组首元素地址
- int len; //数组最大元素个数
- int cnt; //数组有效元素个数
- int increment; //自动增长因子
- } Array;
- /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
- void init_arr(Array * pArr, int length, int incre); //初始化----------------参数:结构体地址,初始长度,增长因子
- bool addend_arr(Array * pArr, int val); //追加------------------------------参数:结构体地址,数值
- bool insert_arr(Array * pArr, int num, int val); //插入------------------参数:结构体地址,插入位置,数值
- bool delete_arr(Array * pArr, int num); //删除------------------------------参数:结构体地址,删除位置
- int get(Array * pArr,int val); //获取元素下标------------------------------参数:结构体地址,元素值 返回值:整型,为该值在数组中的下标
- bool is_empty(Array * pArr); //数组是否为空------------------------------参数:结构体地址
- bool is_full(Array * pArr); //数组是否存满----------------------------------参数:结构体地址
- void sort_arr(Array * pArr); //排序--------------------------------------参数:结构体地址
- void show_arr(Array * pArr); //显示数组----------------------------------参数:结构体地址
- void inversion_arr(Array * pArr); //增加长度------------------------------参数:结构体地址
- /*--------------------------------------------------------------------------------------------------------------------------------------------------------*/
- //主函数
- void main()
- {
- Array num;
- init_arr(&num, 10, 1); //初始化
- addend_arr(&num,1); //追加
- addend_arr(&num,8);
- addend_arr(&num,14);
- addend_arr(&num,21);
- addend_arr(&num,10);
- addend_arr(&num,91);
- addend_arr(&num,2);
- show_arr(&num);
- insert_arr(&num,0,12); //插入
- insert_arr(&num,0,18); //插入
- show_arr(&num);
- int x = get(&num,18); //获取元素下标
- printf("18 is num[%d]\n", x);
- sort_arr(&num); //排序
- show_arr(&num);
- }
- //初始化
- void init_arr(Array * pArr, int length, int incre)
- {
- pArr->pBase = (int *)malloc(sizeof(int) * length);
- if( NULL == pArr->pBase )
- {
- printf("内存分配失败!\n");
- exit(-1);
- }
- else
- {
- pArr->len = length;
- pArr->cnt = 0;
- pArr->increment = incre;
- }
- return;
- }
- //追加
- bool addend_arr(Array * pArr, int val)
- {
- if( is_full(pArr) )
- inversion_arr(pArr);
- pArr->pBase[pArr->cnt] = val;
-
- if(val = pArr->pBase[pArr->cnt] )
- {
- pArr->cnt = pArr->cnt + 1;
- return true;
- }
- else
- {
- return false;
- }
- }
- //插入
- bool insert_arr(Array * pArr, int num, int val)
- {
- //判断插入的是否超出,否-》:末尾依次向后移动,一个
- if( pArr->cnt < num)
- {
- printf("超出数组长度!\n");
- exit(-1);
- }
- else if( (pArr->cnt+1) == pArr->len)
- inversion_arr(pArr);
- for(int i=0; i < (pArr->cnt-num) ;i++)
- {//后移元素
- pArr->pBase[pArr->cnt-i] = pArr->pBase[pArr->cnt-i-1];
- }
- pArr->pBase[num] = val; //插入元素
- if( pArr->pBase[num] == val)
- {
- pArr->cnt = pArr->cnt + 1;
- return true;
- }
- else
- return false;
- }
- //删除元素
- bool delete_arr(Array * pArr, int num)
- {
- pArr->pBase[num-1] == NULL;
- for(int i=num; i<pArr->cnt; i++)
- {//前移元素
- pArr->pBase[i-1] = pArr->pBase[i];
- }
- pArr->cnt = pArr->cnt -1;
- return true;
-
- }
- //获取元素的位置
- int get(Array * pArr,int val)
- {
- for(int i=0; i<pArr->cnt; i++)
- {
- if( pArr->pBase[i] == val)
- return i;
- }
- }
- //数组是否为空
- bool is_empty(Array * pArr)
- {
- if(0== pArr->cnt)
- return true;
- else
- return false;
- }
- //数组是否存满
- bool is_full(Array * pArr)
- {
- if(pArr->len == pArr->cnt)
- return true;
- else
- return false;
- }
- //排序
- void sort_arr(Array * pArr)
- {
- for(int x=0;x<pArr->cnt-1;x++)
- {
- for(int y=x+1;y<pArr->cnt;y++)
- {
- if( pArr->pBase[x] >= pArr->pBase[y] )
- {
- int change;
- change = pArr->pBase[y];
- pArr->pBase[y] = pArr->pBase[x];
- pArr->pBase[x] = change;
- }
- }
- }
- }
- //显示数组
- void show_arr(Array * pArr)
- {
- if( is_empty(pArr) )
- printf("数组为空!\n");
- else
- {
- for(int i=0;i<pArr->cnt;i++)
- {
- printf("%d ", pArr->pBase[i] );
- }
- printf("\n");
- }
- return;
- }
- //增加长度
- void inversion_arr(Array * pArr)
- { //扩充内存
- pArr->pBase = (int *)realloc(pArr->pBase, sizeof(int) * (pArr->len+pArr->increment));
- if( NULL == pArr->pBase )
- {
- printf("内存扩充失败!\n");
- exit(-1);
- }
- else
- {
- pArr->len = pArr->len + pArr->increment;
- }
- }
复制代码
array.rar
(1.35 KB, 下载次数: 0)
|
|