直接贴程序:

/*2016年9月12日15:00:49对动态数组的操作与算法
*/
#include<stdio.h>
#include<malloc.h>    //malloc函数在此头文件
#include<stdlib.h>   //使用exit函数需要此头文件struct Array
{int len;    //数组的长度int cnt;    //数组有效数值的个数int * pBase;   //存储数组第一个元素的地址
};//函数声明
void init_arr(struct Array * pArr, int length);
void show_arr(struct Array * pArr);
bool is_empty(struct Array * pArr);
bool is_full(struct Array * pArr);
bool append_arr(struct Array * pArr, int val);
bool insert_arr(struct Array * pArr, int pos, int val);
bool delete_arr(struct Array * pArr, int pos, int * val);
int get(struct Array * pArr, int pos);
void inversion_arr(struct Array * pArr);
void sort_arr(struct Array * pArr); int main(void)    //主函数用来测试各个函数的正确性
{struct Array arr;int val;init_arr(&arr, 6);     //初始化  show_arr(&arr);            //输出数组的值append_arr(&arr, 0);append_arr(&arr, 8);append_arr(&arr, 3);append_arr(&arr, 6);append_arr(&arr, -2);show_arr(&arr);sort_arr(&arr);show_arr(&arr);// printf("%d\n",get(3));// insert_arr(&arr, 1, 99);// show_arr(&arr);// if(delete_arr(&arr, 3, &val))// {// printf("删除的值为:%d\n", val);// }// else // {// printf("删除失败!\n");// }// show_arr(&arr);return 0;
}void init_arr(struct Array * pArr, int length)   //初试化,即创建一个数组
{pArr->pBase = (int *)malloc( sizeof(int) * length);   //动态数组if( NULL == pArr->pBase){printf("内存分配失败,程序终止!\n");exit(-1);}pArr->len = length;pArr->cnt = 0;return;
}void show_arr(struct Array * pArr)       //输出数组的值
{int i;if( 0 == pArr->cnt)      //先判断数组是否为空{printf("该数组为空!\n");}else{for(i = 0; i < pArr->cnt; ++i){printf("  %d  \n", pArr->pBase[i]);}printf("\n");}
}bool is_empty(struct Array * pArr)     //判断数组是否空
{if( 0 == pArr->cnt )return true;else return false;
}bool is_full(struct Array * pArr)     //判断数组是否满
{if( pArr->len == pArr->cnt )return true;else return false;
}bool append_arr(struct Array * pArr, int val)   //在数组末尾追加新元素val
{if( is_full(pArr) )   //先判断数组是否满{return false;}        else{pArr->pBase[pArr->cnt] = val;++(pArr->cnt);return true;}
}bool insert_arr(struct Array * pArr, int pos, int val)   //在位置pos上插入一个新元素val,pos从1开始
{int i;if( is_full(pArr))        //先判断数组是否满{return false;}else if(pos<0 || pos>(pArr->cnt)+1)   //判断插入的位置是否有效{return false;}else{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 Array * pArr, int pos, int * val)      //将位置pos上的元素删除,并用val接收删除的值
{int i;if( is_empty(pArr))        //先判断数组是否空{return false;}else if(pos<0 || pos>pArr->cnt)   //判断删除的数值是否有效范围{return false;}else{(*val) = pArr->pBase[pos-1];for(i = pos; i<pArr->cnt; ++i)        //将要删除的元素右边的数值整体向前移一个位置{pArr->pBase[i-1] = pArr->pBase[i];}--(pArr->cnt); return true;}
}int get(struct Array * pArr, int pos)     //获取数组pos位置上的数值,pos从1开始
{return pArr->pBase[pos-1];
}void inversion_arr(struct Array * pArr)    //将数组的元素倒置
{int i, j, t;i = 0;j = pArr->cnt-1;while(i < j){t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;++i;--j;}return;
}void sort_arr(struct Array * pArr)     //将数组的元素从小到大排序,使用的是冒泡排序
{int i, j, t;for(i = 0; i < pArr->cnt-1; ++i){for(j = 0; j < pArr->cnt-1-i; ++j){if(pArr->pBase[j] > pArr->pBase[j+1]){t = pArr->pBase[j];pArr->pBase[j] = pArr->pBase[j+1];pArr->pBase[j+1] = t;}}}return;
}

转载于:https://www.cnblogs.com/yzy-blogs/p/6597333.html

对动态数组的操作与算法相关推荐

  1. 动态数组相关操作 0104 ArrayList

    动态数组相关操作 0104 引入命名空间 using System.Collections; 实例化一个动态数组 类名称:ArrayList 基本的实例化 ArrayList 数组名= new Arr ...

  2. 关于动态数组指针操作的两个例子

    最近突然感觉 Delphi 的动态数组非常好用, 善用它可以省略很多 GetMem.ReallocMem; 并且它是被自动维护的. 动态数组变量 arr 本身就是指针, 不能再用 @arr 获取; 但 ...

  3. MFC中动态数组CArray的使用

    MFC中动态数组CArray的使用 2010-04-27 10:21 数组--这个C语言中的怪物,自从被直接继承到C++中,便让无数有识之士们前赴后继.绞尽脑汁,试图寻找一种可以动态增长的替代数据类型 ...

  4. 数据结构-动态数组(ArrayList)

    什么是数据结构? 数据结构就是计算机用来进行存储,组织数据的方式, 也可以想象成一个容器,用来装载数据. 常见的数据结构有以下三种分类: 而每一种数据结构则根据不同的场合以及不同的需求根据情况选择使用 ...

  5. 以太坊EVM动态数组越界导致OOM分析

    solidity 动态数组原理分析 solidity 和Python ,JavaScript 一样,支持动态数组.我们知道,在Python 和JavaScript 里,动态数组内部的对象(比如:Len ...

  6. C语言数据结构-动态数组

    C语言动态数组就是建立一个动态数组结构体,其中包括一个指针,一个当前元素个数,一个容量. //动态数组的结构体定义 typedef struct DYNAMICARRAY {int *pAddr;// ...

  7. 数据结构与算法:动态数组(利用万能指针实现任意类型数组操作)

    原理介绍 我们利用万能指针来实现动态数组,数组元素类型可以是任意类型,因为我们只维护用户提供的数据的地址,所以可以用万能指针来接受,这样就实现了类似C++中的模板功能了. 先说说动态数组和静态数组.静 ...

  8. 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法

    目录 软件的基本是要处理好"算法"及其基础(一): 流->计算机字->字符(包括某个数字.字母.符号和某个汉字等)->字符串->字节动态数组->字节- ...

  9. 动态数组的各种操作 0104 c#

    动态数组的各种操作 0104 c# 遍历 删除,按数据 删除,按索引 修改 尾添加

最新文章

  1. Sublime text3 快捷方式(windows平台)
  2. 必备面试题:系统CPU飙高和GC频繁,如何排查?
  3. Android --- 解决 cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037: 由于目标计算机积极拒绝,无
  4. 线性结构--离散存储 链表讲解
  5. 密码学专题 数据填充的方式|序列加密的方式
  6. 获取repeater控件模版列中的控件
  7. LINUX编译sofia-sip
  8. fiddler2抓包工具使用图文教程
  9. java web问卷调查设计方案_Java web 调查问卷
  10. 字节跳动小程序平台审核常见被拒情形
  11. 顺序结构(C语言基本结构)
  12. 传统深度模型的uncertainty----Monte Carlo dropout
  13. 关于Google谷歌微信不能使用小程序
  14. Music decoding tool | 音乐解码工具
  15. NVIDIA 460.79版显卡驱动发布:全力优化《赛博朋克2077》
  16. 012.二叉树的所有路径
  17. matlab regress 非线性,MATLAB用regress作多元非线性回归
  18. STM32+HTU21D 获取温湿度数据
  19. 互联网日报 | 名创优品潮玩全球首店开业;百度昆仑1芯片实现量产;特斯拉在华超充站突破600座...
  20. 计算机安装错误及分析,安装Win7/Win8/Win10系统提示无法安装所需的文件及错误代码0X80070002的解决方法...

热门文章

  1. leetcode:Excel Sheet Column Number
  2. (转载)解决eclipse安装maven的问题:Unable to update index for central|http://repo1.maven.org/maven2...
  3. Ettercap-中间人欺骗
  4. 仿58网,赶集网,百姓网swfupload图片上传效果(asp.net 2.0)
  5. 非IE浏览器下让界面变灰色
  6. docker exec 权限问题,准成,亲自验证过,成功!!!
  7. 6-7Pytorch搭建cifar10训练脚本(下)
  8. Python机器学习:线型回归法008实现多元线性回归
  9. 计算机字符代码表,计算机ASCII码对照表
  10. java 图形题,20140314 java练习题-打印各种图形