数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表]

1. 数组的基本概念与存储结构

2. 特殊矩阵的压缩存储

3. 稀疏矩阵的三元组表示

4. 稀疏矩阵的十字链表表示

5. 广义表

6. 广义表的存储结构及基本运算的实现

【项目1 - 猴子选大王(数组版)】

一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。

要求采用数组作为存储结构完成。

参考解答

【项目2 - 对称矩阵压缩存储的实现与应用】

(1)用压缩形式存储对称矩阵,实现下面的操作并测试

void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组B
int Value(int b[], int i, int j);//返回存储在b[M]中,对应二维数组A[i][j]的值
void Assign(int b[], int e, int i, int j);//将e赋值给对应二维数组元素A[i][j],要存储到B[M]中
void Disp(int b[]);//输出压缩存储在b中的对称矩阵
void Destroy(int b[]);//销毁存储空间

参考解答

(2)设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。

参考解答

(3)延伸:写出对上、下三角矩阵、对角矩阵的压缩存储结构,以及相关的基本运算的实现

[参考解答(略)]

【项目3-稀疏矩阵的三元组表示的实现及应用】

(1)建立稀疏矩阵三元组表示的算法库,包括:

① 头文tup.h,定义数据类型,声明函数;

② 源文件tup.cpp,实现稀疏矩阵三元组表示的基本运算,主要算法包括:

void CreatMat(TSMatrix &t,ElemType A[M][N]);  //从一个二维稀疏矩阵创建其三元组表示
bool Value(TSMatrix &t,ElemType x,int i,int j);  //三元组元素赋值
bool Assign(TSMatrix t,ElemType &x,int i,int j);  //将指定位置的元素值赋给变量
void DispMat(TSMatrix t); //输出三元组
void TranTat(TSMatrix t,TSMatrix &tb);//矩阵转置

③ 设计main函数,测试上面实现的算法

参考解答

(2)采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法

提示1:两个行数、列数相同的矩阵可以相加

提示2:充分利用已经建立好的算法库解决问题

提示3:教材例6.3已经给出两个稀疏矩阵相加的运算的算法,但未利用基本运算。请比较这两种方案

参考解答

【项目4-广义表算法库及应用】

(1)建立广义表算法库,包括:

① 头文glist.h,定义数据类型,声明函数;

② 源文件glist.cpp,实现稀疏矩阵三元组表示的基本运算,主要算法包括:

int GLLength(GLNode *g);    //求广义表g的长度
int GLDepth(GLNode *g);     //求广义表g的深度
GLNode *CreateGL(char *&s); //返回由括号表示法表示s的广义表链式存储结构
void DispGL(GLNode *g);     //输出广义表g

③ 设计main函数,测试上面实现的算法

参考解答

(2)设计一个算法,求出给定广义表g中的原子个数

(3)设计一个算法,求出给定广义表g中的最大原子

参考解答

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 07:17:04

数据结构实践项目——数组和广义表的相关文章

数据结构22:数组和广义表

本章主要介绍了数组和广义表的相关知识.数组章节,重点理解矩阵压缩存储的方式,在此基础上,学习矩阵的转置.乘法.和加法运算的实现:学习广义表时重点理解用递归的思想求广义表的深度和复制广义表. 本章内容: 1. 数据结构之多维数组 2. 矩阵压缩存储(十字链表.三元组顺序表.行逻辑 3. 矩阵转置算法及代码实现(三元组顺序表) 4. 矩阵乘法(行逻辑链接的顺序表)及代码实现 5. 矩阵加法(基于十字链表)及C语言代码实现 6. 广义表及M元多项式的C语言代码实现 7. 广义表的长度和深度 8. 广义

数据结构4(数组和广义表)

第4章  数组和广义表 [例4-1]二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10.若A以行为主序存储元素,A[8][5]的物理地址与当A按列为主序存储时的元素(  )的物理地址相同.设每个字符占一个字节. A.A[8][5]    B.A[3][10]    C.A[5][8]    D.A[0][9] //作图 解:  二维数A是一个9行10列的矩阵,即A[9][10].按行存储时,A[8][5]是第85个元素存储的元素.而按列存储时,第8

数据结构(C语言第2版)-----数组,广义表,树,图

任何一个算法的设计取决于选定的数据结构,而算法的实现依赖于采用的存储结构. 之前线性表的数据元素都是非结构的原子类型,元素的值是不可再分的.下面学习的这两个线性表是很特殊的,其中数据元素本身也可能是一种数据结构. 认识数组和广义表 数组可以看成是一种特殊的线性表,也就是线性表中的数据元素本身也是一个线性表,数组中的个元素具有统一的类型.其实说白了就是在脑海中想数组中的数据如何在内存中以什么形式的线性表来存储.在C语言中,一个二维数组可以定义为其分量类型为一维数组类型的一维数组类型. 数组一旦被建

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

数组和广义表-第5章-《数据结构题集》答案解析-严蔚敏吴伟民版

习题集解析部分 第5章 数组和广义表 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       本习题文档的存放目录:数据结构\▼配套习题解析\▼05 数组和广义表       文档中源码的存放目录:数据结构\▼配

5-5-广义表(头尾链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(头尾链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c    

5-6-广义表(扩展线性链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(扩展线性链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c  

5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 行逻辑链接的顺序表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试