数据结构基础二-----之模块一《线性存储【数组】》
来源:互联网 发布:淘宝的手机能买吗 编辑:程序博客网 时间:2024/06/06 12:33
模块一:线性存储【把所有的结点用一根直线穿起来】
一:连续存储[数组] //所谓连续存储 指的是地址连续
1.什么叫做数组
元素类型相同,大小相等
2.数组的优缺点(相对于链表)
优点:存取速度快
缺点:实现必须知道数组的长度
需要大块连续的内存块
插入和删除元素很慢
空间通常是有限制的
仿JAVA中ArrayList对象示例代码:
#include<stdio.h>#include<malloc.h>#include<stdlib.h>//包含了stdlib //定义了一个数据类型 该数据类型的名字叫做 struct Arr 该数据类型含有三个成员。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的值从1 开始在 pso 位置的前面插入一个元素bool delete_arr(struct Arr * pArr,int pos,int *pVal);//用指针 返回删除的数据。bool get();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(void){ 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); append_arr(&arr,5);*/ append_arr(&arr,1); append_arr(&arr,2); append_arr(&arr,3); append_arr(&arr,4); //insert_arr(&arr,5,99); show_arr(&arr);/* if(delete_arr(&arr, 3, &val)) { printf("删除成功\n"); printf("您删除的元素是:%d\n",val); } else{printf("删除失败"); }*/ inversion_arr(&arr); show_arr(&arr); sort_arr( &arr); show_arr(&arr);return 0;}void init_arr(struct Arr * pArr,int length){ //(*pArr ).len = 99; pArr -> pBase = (int *) malloc(sizeof(int)*length); //如果内存已经用完 分配失败 返回NULL 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(数组为空)//提示用户数组为空// else//输出数组有效内容 if(is_empty(pArr)) { printf("数组内容为空\n"); } else { for(int i = 0;i<pArr->cnt;++i) {printf("%d\n",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;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--; }}//数据结构中对排序的要求很多这里只是简单介绍 以后会重点讲//这里讲的是冒泡排序void sort_arr(struct Arr * pArr){ int i ,j; int t; for(i = 0;i<pArr->cnt;++i) { for(j = 1;j<=pArr->cnt;++j) { if(pArr->pBase[j] <pArr->pBase[i]) { t =pArr->pBase[i]; pArr->pBase[i] = pArr->pBase[j]; pArr->pBase[j] = t; } } }}
阅读全文
0 0
- 数据结构基础二-----之模块一《线性存储【数组】》
- 数据结构基础三-----之模块一《离散存储【链表】》
- 数据结构与算法基础(二)之线性表的顺序存储
- 数据结构与算法基础(二)之线性表的链式存储与指针的概念
- 数据结构基础之数组实现线性表各种操作(二)
- 数据结构线性结构之连续存储---数组
- 数据结构之线性结构的顺序存储(数组)
- 数据结构学习笔记之线性结构--连续存储[数组]
- 数据结构学习笔记(二)------------线性表之链式存储
- 数据结构线性表(一)之顺序存储结构思路
- 数据结构之线性结构(二,联合数组等)
- 数据结构之线性结构(二,联合数组等)
- 数据结构基础之数组实现线性表各种操作
- 数据结构笔记之线性存储
- 数据结构之线性结构--数组
- 数据结构基础之线性表
- 数据结构基础之线性表
- 数据结构之线性表一:
- Ilya and Queries
- 基于 CentOS 搭建 FTP 文件服务
- 【c#】类的定义---各关键字的作用
- mybatis mysql 批量insert 返回主键
- 创始人不得不学的团队建设法则
- 数据结构基础二-----之模块一《线性存储【数组】》
- MySQL在linux上的安装
- 【c#】类类型和结构类型的区别
- 目录树 数据结构设计
- SVN概述
- 携程第四代架构探秘之运维基础架构升级
- Python,Jupyter Notebook,IPython快速安装教程
- 【c#】定义类成员(字段、方法、属性)
- Hanoi Tower 汉诺塔的简单分析/C