数据结构入门 您所在的位置:网站首页 数组的基本操作是 数据结构入门

数据结构入门

2024-07-11 21:53| 来源: 网络整理| 查看: 265

一、数组的定义

数组是多个有序数据的集合(有序:地址连续),数组中的每一个元素都属于同一数据类型。

二、数组的声明 一维数组

一维数组声明的简单形式: 类型说明符 数组名 [整数类型表达式]; 其中,类型说明符是数组元素的类型,数组名是一个标识符,符号“[]”内的整数类型表达式表示数组元素的个数,即数组的长度。如果整数类型表达式是常量表达式,其值必须大于0。

二维数组

二维数组声明的简单形式: ** 类型说明符 数组名 【行数 】【列数 】; ** 其中,类型说明符是数组元素的类型,数组名是一个标识符;行数和列数是整数类型表达式,数组元素的个数是行数与列数的乘积。如果表示行数或列数的表达式是整数常量表达式,其值必须大于零。

三、数组的C语言实现 1、数组的定义

仿造java中的ArrayList,应该还会有一个自动增长因子。用于在添加时如果数组的长度不够,那么会自动的扩充。那么扩充多少就依赖于自动增长因子。

struct Arr{ int * pBase; //存储的是数组第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt; //当前数组有效元素的个数 //int increment; //自动增长因子 }; 2、数组各个功能的实现 初始化追加数据插入数据删除数据获取数据排序显示数组全部内容倒置是否空是否满 #include #include #include #include struct Arr{ int * pBase; //存储的是数组第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt; //当前数组有效元素的个数 //int increment; //自动增长因子 }; void init(struct Arr * , int); //初始化 bool append(struct Arr * , int); //追加 bool insert(struct Arr * , int , int); //插入 bool delete(struct Arr * , int , int *); //删除 int get(struct Arr * , int ); //获取 void sort(struct Arr *); //排序 void show(struct Arr *); //显示 void inversion(struct Arr *); //倒置(反转) bool isEmpty(struct Arr *); //是否空 bool isFull(struct Arr *); //是否满 int main(void){ struct Arr arr; int val; printf("开始初始化数组...\n"); init(&arr , 6); append(&arr , 23); append(&arr , 33); append(&arr , 6); append(&arr , 77); //append(&arr , 5); //append(&arr , 6); insert(&arr , 4 ,99); //delete(&arr , 2 , &val); printf("删除的元素是:%d\n",val); show(&arr); inversion(&arr); printf("倒置后输出:\n"); show(&arr); printf("排序后输出:\n"); sort(&arr); show(&arr); printf("获取的值为:%d\n",get(&arr , 4)); return 0; } //初始化数组 void init(struct Arr * pArr , int len){ //此时 *pArr 就相当于 arr pArr->pBase = (int *)malloc(sizeof(struct Arr)*len); if (NULL == pArr->pBase) { printf("动态内存分配失败!\n"); exit(-1); } else { pArr->len = len; pArr->cnt = 0; } return; }; //打印数组有效内容 void show(struct Arr * pArr){ if(isEmpty(pArr)){ printf("数组为空!\n"); } else{ for (int i = 0; i cnt; i++) { printf("%d\t",pArr->pBase[i]); } printf("\n"); } }; //向数组内追加数据 bool append(struct Arr * pArr , int value){ if (isFull(pArr)) { printf("数组已满!\n"); return false; } pArr->pBase[pArr->cnt] = value; ++(pArr->cnt); return true; }; //向数组内插入数据 bool insert(struct Arr * pArr , int pos , int value){ //pos的值从1开始,在pos的前面插入数据 int temp; //判断数组是否满 if (isFull(pArr)) { printf("数组已满,无法插入!\n"); return false; } //判断pos的值是否合法 if (pos pArr->cnt+1) { printf("pos的值不合法,无法插入数据!\n"); return false; } //先将数组原有的数据后移 for (int i = pArr->cnt - 1; i >= pos -1; i--) { pArr->pBase[i+1] = pArr->pBase[i]; } //将数据插入数组 pArr->pBase[pos - 1] = value; //数组有效位数增加 pArr->cnt++; return true; } //删除一个元素,并返回删除的值 bool delete(struct Arr * pArr, int pos, int * pVal){ // if (isEmpty(pArr)) { printf("数组为空,无法删除元素!\n"); return false; } if (pos pArr->cnt) { printf("pos的值不合法,无法删除元素!\n"); return false; } //将要删除的值赋值给pVal *pVal = pArr->pBase[pos-1]; //将数组的值前移 for (int i = pos; i cnt; i++) { pArr->pBase[i-1] = pArr->pBase[i]; } pArr->cnt--; return true; } //将数组的元素倒置 void inversion(struct Arr * pArr){ int temp; int i = 0; int j = pArr->cnt-1; if (isEmpty(pArr)) { printf("数组为空,无法倒置!\n"); return; } while (i int temp; if (isEmpty(pArr)) { printf("数组为空,无法排序!\n"); return; } for (int i = 1; i cnt; i++) { for (int j = 0 ; j cnt - i; j++) { if (pArr->pBase[j]>pArr->pBase[j+1]) { temp = pArr->pBase[j]; pArr->pBase[j] = pArr->pBase[j+1]; pArr->pBase[j+1] = temp; } } } return; }; //获取数组的数据 int get(struct Arr * pArr , int index){ //index从0开始 if (isEmpty(pArr) || index > pArr->cnt - 1 ) { printf("数组为空或者下标越界!\n"); exit(-1); } return pArr->pBase[index]; }; //判断数组是否为空 bool isEmpty(struct Arr * pArr){ if (0 == pArr->cnt) { return true; } return false; } //判断数组是否满 bool isFull(struct Arr * pArr){ if (pArr->len == pArr->cnt) { return true; } return false; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有