数据结构与算法笔记——顺序表(数组)与矩阵
目录
前言
一、顺序表的结构
二、顺序表的初始化
三、基本操作
1.插入数据
2.删除数据
3.查找数据
总结
前言
顺序表是线性表的顺序存储结构的实现,基本操作有顺序表的初始化、插入、删除和查询。
一、顺序表的结构
由数据部分存储部分、数组实际使用大小和空间开辟大小。
#define LIST_SIZE 20
//数据部分结构
struct Data{int x;double y;
}; //顺序表的结构部分
typedef struct Node{Data* elem; //用于动态分配
// Data elem[LIST_SIZE]; //静态分配,由于固定大小不方便,故常使用上面的int length;int listsize;
}Sqlist;
二、顺序表的初始化
有两种分配空间的方式:静态分配固定空间和动态分配可变空间
#define LIST_SIZE 20
bool InitSqlist(Sqlist &L){L.elem = (Data *)malloc(LIST_SIZE * sizeof(Data));if(!L.elem) return false;L.length = 0; //若是静态分配只需要下面的部分L.listsize = LIST_SIZE;return true;
}
三、基本操作
1.插入数据
//按位插入
bool InsertList(SqList &L, int i, Data e){if( i < 1 || i > L.length+1 ) return false;if(L.length >= L.listsize){Data *m =(Data *)realloc(L.s,(List_Size+100)*sizeof(Data));if(!m) return false;L.listsize = List_Size+100;}Data *p = &(L.s[i-1]);for(Data *q = &(L.s[L.length-1]); q >= p; q--) *(q+1) = *q;*p = e;L.length++;return true;
}
2.删除数据
//删除数据,找到删除数据位置,从后往前覆盖
bool DeleteList(SqList &L, int i, Data &e){if( i < 1 || i > L.length ) return false;Data *p = &(L.s[i-1]);e = *p;for(Data *q = &(L.s[L.length-1]); p < q; p++)*p = *(p+1);L.length--;return true;
}
3.查找数据
void ShowList(SqList &L){if( L.length == 0 )printf("这是空表!\n");for(int i = 0; i < L.length; i++ ){printf("data[%d].x = %d\n", i , L.s[i].x);printf("data[%d].y = %lf\n", i , L.s[i].y);}
}
四、顺序表(数组)有关的一些经典问题
1.打印问题
(1)顺时针打印矩阵
分析:由全局到局部,找出打印规律,注意边界条件
1.二点确定一个矩形,依次向内移动左上点和右下点
2.每次对确定的矩阵,打印四条边(注意是否重复打印)
(2)Z字打印二维数组
分析:
可以按照题目逐次移动x,y打印
或者确定对角线两点,不断在这对角线来回打印
2.数组元素变换问题
(1)将0所在的行列清零
分析:利用二维数组记录需要清零的位置,避免修改原二维数组的元素为0,而导致数组全部清零(保留信息)
(2)方阵旋转
分析:逐层旋转四边对应位置的元素
(3)替换空格
3.数组查找问题
(1)二维数组查找
(2)数组中重复数字
(3)第一个只出现一次的字符位置
(4)找出边界为1的最大子方阵
分析:
从N阶开始,以左上点遍历二维数组
4.数组累加和问题
(1)子数组最大累加和
分析:
解法1:遍历初始起点,遍历结果点,暴力比较所有情况得到最大区间和
解法2:前缀和求和,对求和为正数,继续累加下一元素,对求和为负数,更新重新计算求和
(2)子矩阵最大累加和
总结
数组问题一般与其他问题混合在一起出现
数据结构与算法笔记——顺序表(数组)与矩阵相关推荐
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
- (PTA数据结构与算法) 6-2 顺序表操作集 ——请告诉我什么是顺序表!!!
6-2 顺序表操作集 (20 分) 本题要求实现顺序表的操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); b ...
- 数据结构与算法:顺序表和链表的常用操作 (很全,基本涵盖本章所有算法)
文章目录 前言: 一.顺序表 二.链表 前言: 数据结构中的表操作算是里面较为简单的章节,但也比较重要,3月份学完的此章节,左思右想今天还是写篇 关于顺序表和链表的博客. ps : 复制代码可以在编译 ...
- 【数据结构与算法】顺序表V3.0的Java实现
更新说明 经过了顺序表V1.0的根据接口编写成型.顺序表V2.0的功能大幅度增强,这里推出了顺序表V3.0,功能的丰富性不及V2.0,但加入了迭代器,代码的编写也更加的合理了,应该说是比较好的作品了. ...
- Python数据结构与算法(四)--顺序表
顺序表 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元素). 根 ...
- php算法结构,PHP数据结构与算法:顺序表
一.概念 把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里,元素间的顺序关系由它们的存储顺序自然表示. 逻辑顺序与物理顺序一致 元素之间的关系以元素在计算机内的"物理位置相邻&qu ...
- 【数据结构与算法】顺序表的Java实现
定义接口 首先定义一个接口,作为规范. 为了能够有更强的适用性,我们定义的泛型类. 提供的功能有: 遍历线性表并打印: 求线性表的长度: 按值查找: 按位查找: 在指定逻辑位置插入: 删除指定逻辑位元 ...
- 【数据结构与算法】顺序表V2.0的Java实现
接口 public interface ISequentialList<T> {/*** 获取长度* @return*/int size();/*** 判空* @return*/boole ...
- Java数据结构和算法:字符串、数组和广义表
数组和广义表是与前述的线性表有所区别的数据结构.它们可以看成是线性表在下述含义上的扩展:线性表中的元素本身也是一个数据结构 字符串 字符串的定义.存储结构 字符串(string)是由n (n≥0) 个 ...
最新文章
- 常用神经网络模型及其应用评述
- 用CSS美化被鼠标选中的文字的样式
- python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
- 10.Object类
- 解决:vue 用 axios 发送请求,每次都会发送两次请求
- CodeForces 1065E. Side Transmutations 计数
- Unity中提升像素字体清晰度
- Go语言面向对象编程
- 12.用户和组账户管理
- 使用ERStudio创建数据表与ER图
- EDA第一次课<1117电路图的绘制>
- SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
- 22款受欢迎的计算机取证工具
- 项目开发 | 转载 | 需求评审与技术评审
- 关于阳明学“心即理”的浅显理解
- android 解决图片替换之后没有更新图片
- EI会议常见几个出版商出版刊物!
- MPLS隧道——单域基础理论讲解
- 京东与阿里要用区块链打击假货 造假将无可遁形
- 贪心法解决最小顶点覆盖
热门文章
- 维吉尼亚密码c语言实现
- 超级详细 的 Redis 安装教程
- Python爬虫之request模块
- Mysql出现问题:ERROR 1116 (HY000 (ER_TOO_MANY_TABLES)): Too many tables; MySQL can only use %d tabl解决方案
- scrollTop属性
- unity免费使用谷歌翻译(使用tk值,防止数量限制的错误)
- MFC atoi 函数
- 服装产业发展趋势|供应链|智能制造
- 优秀的简历,该这么写!(可领简历模板)
- windows下安装ubuntu linux子系统