数据结构第02章 (清华 殷人昆版).pptx
《数据结构第02章 (清华 殷人昆版).pptx》由会员分享,可在线阅读,更多相关《数据结构第02章 (清华 殷人昆版).pptx(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、作为抽象数据类型的数组作为抽象数据类型的数组n n一维数组一维数组uu 一维数组的示一维数组的示例例35 27 49 18 60 54 77 83 41 020 1 2 3 4 5 6 7 8 9第1页/共66页一维数组的特点一维数组的特点n n连续存储的线性表(别名连续存储的线性表(别名 向量向量)第2页/共66页数组的定义和初始化数组的定义和初始化#include class szcl int e;public:szcl()e=0;szcl(int value)e=value;int get_value()return e;第3页/共66页main()szcl a13=3,5,7,*ele
2、m;for(int i=0;i 3;i+)cout a1i.get_value()“n”;/静态 elem=a1;for(int i=0;i 3;i+)cout get_value()“n”;/动态 elem+;return 0;第4页/共66页一维数组一维数组(Array)类的定义类的定义#include#include template class Array Type*elements;/数组存放空间 int ArraySize;/当前长度 void getArray();/建立数组空间 public:Array(int Size=DefaultSize);Array(const Arr
3、ay&x);第5页/共66页 Array()delete elements;Array&operator=/数组复制 (const Array&A);Type&operator (int i);/取元素值 int Length()const return ArraySize;/取数组长度 void ReSize(int sz);/扩充数组 第6页/共66页 template void Array:getArray()/私有函数:创建数组存储空间 elements=new TypeArraySize;if(elements=NULL)arraySize=0;cerr “存储分配错!endl;re
4、turn;一维数组公共操作的实现一维数组公共操作的实现第7页/共66页 template Array:Array(int sz)/构造函数 if(sz=0)arraySize=0;cerr “非法数组大小”endl;return;ArraySize=sz;getArray();第8页/共66页 template Array:Array(Array&x)/复制构造函数 int n=ArraySize=x.ArraySize;elements=new Typen;if(elements=NULL)arraySize=0;cerr “存储分配错”endl;return;Type*srcptr=x.e
5、lements;Type*destptr=elements;while(n-)*destptr+=*srcptr+;第9页/共66页template Type&Array:operator (int i)/按数组名及下标 i,取数组元素的值 if(i ArraySize-1)cerr “数组下标超界”endl;return NULL;return elementi;使用该函数于赋值语句 Pos=Positioni-1+Numberi-1第10页/共66页 template void Array:Resize(int sz)if(sz=0&sz!=ArraySize)Type*newarray=
6、new Typesz;/创建新数组 if(newarray=NULL)cerr “存储分配错”endl;return;int n=(sz 0 a,i=0 a+i*la第14页/共66页n n 二维数组二维数组行优先行优先 LOC(j,k)=a+(j*m+k)*l第15页/共66页n n 三维数组三维数组F 各维元素个数为各维元素个数为 m1,m2,m3F 下标为下标为 i1,i2,i3的数组元素的存储地的数组元素的存储地址:址:(按页(按页/行行/列存放)列存放)LOC(i1,i2,i3)=a+(i1*m2*m3+i2*m3+i3)*l 前前i1页总页总元素个数元素个数第第i1页的页的前前i2
7、行行总总元素个数元素个数第16页/共66页n n n 维数组维数组F 各维元素个数为各维元素个数为 m1,m2,m3,mnF 下标为下标为 i1,i2,i3,in 的数组元素的的数组元素的存储地址:存储地址:LOC(i1,i2,in)=a+(i1*m2*m3*mn+i2*m3*m4*mn+in-1*mn+in)*l 第17页/共66页线性表线性表(Linear List)n n线性表的定义和特点线性表的定义和特点uu 定义定义 n(0)个数据元素的个数据元素的有限序列,记作有限序列,记作 (a1,a2,an)ai 是表中数据元素,是表中数据元素,n 是表长度。是表长度。uu 遍历遍历 逐项访问
8、:逐项访问:从前向后从前向后 从后向前从后向前 第18页/共66页线性表的特点线性表的特点n n除第一个元素外,其他每一个元素除第一个元素外,其他每一个元素有一个且仅有一个有一个且仅有一个直接前驱直接前驱。n n除最后一个元素外,其他每一个元除最后一个元素外,其他每一个元素有一个且仅有一个素有一个且仅有一个直接后继直接后继。第19页/共66页顺序表顺序表(Sequential List)n n顺序表的定义和特点顺序表的定义和特点uu 定义定义 将线性表中的元素相继将线性表中的元素相继存放在一个连续的存储空间中。存放在一个连续的存储空间中。uu 可利用可利用一维数组一维数组描述描述存储结构存储结
9、构uu 特点特点 线性表的顺序存储方式线性表的顺序存储方式uu 遍历遍历 顺序顺序访问访问 25 34 57 16 48 09 0 1 2 3 4 5 data第20页/共66页顺序表顺序表(SeqList)类的定义类的定义template class SeqList Type*data;/顺序表存储数组 int MaxSize;/最大允许长度 int last;/当前最后元素下标public:SeqList(int MaxSize=defaultSize);SeqList()delete data;int Length()const return last+1;第21页/共66页 int F
10、ind(Type&x)const;/查找 int Locate(int i)const;/定位 int Insert(Type&x,int i);/插入 int Remove(Type&x);/删除 int Next(Type&x);/后继 int Prior(Type&x);/前驱 int IsEmpty()return last=-1;int IsFull()return last=MaxSize-1;Type Get(int i)/提取 return i last?NULL:datai;第22页/共66页顺序表部分公共操作的实现顺序表部分公共操作的实现 template /构造函数 Se
11、qList:SeqList(int sz)if(sz 0)MaxSize=sz;last=-1;data=new TypeMaxSize;if(data=NULL)MaxSize=0;last=-1;return;第23页/共66页template int SeqList:Find(Type&x)const /搜索函数:在表中从前向后顺序查找 x int i=0;while(i last)return-1;else return i;第24页/共66页顺序搜索图示顺序搜索图示25 34 57 16 48 09 0 1 2 3 4 5 data搜索搜索 16 i25 34 57 16 48 09
12、 i25 34 57 16 48 09 i25 34 57 16 48 09 i搜索成功搜索成功第25页/共66页25 34 57 16 48 0 1 2 3 4data搜索 50 i25 34 57 16 48 i25 34 57 16 48 i25 34 57 16 48 i25 34 57 16 48 i搜索失败搜索失败第26页/共66页搜索成功搜索成功 若搜索概率相等,则若搜索概率相等,则搜索不成功搜索不成功 数据比较数据比较 n 次次第27页/共66页表项的插入表项的插入25 34 57 16 48 09 63 0 1 2 3 4 5 6 7data50插入 x25 34 57 50
13、 16 48 09 63 0 1 2 3 4 5 6 7data50i第28页/共66页template int SeqList:Insert(Type&x,int i)/在表中第 i 个位置插入新元素 x if(i last+1|last=MaxSize-1)return 0;/插入不成功 else last+;for(int j=last;j i;j-)dataj=dataj-1;datai=x;return 1;/插入成功 第29页/共66页表项的删除表项的删除25 34 57 50 16 48 09 63 0 1 2 3 4 5 6 7data16删除 x25 34 57 50 48
14、09 63 0 1 2 3 4 5 6 7data第30页/共66页 template int SeqList:Remove(Type&x)/在表中删除已有元素 x int i=Find(x);/在表中搜索 x if(i=0)last-;for(int j=i;j=last;j+)dataj=dataj+1;return 1;/成功删除 return 0;/表中没有 x 第31页/共66页顺序表的应用:顺序表的应用:集合的集合的“并并”运算运算void Union(SeqList&A,SeqList&B)int n=A.Length();int m=B.Length();for(int i=1
15、;i=m;i+)int x=B.Get(i);/在B中取一元素 int k=A.Find(x);/在A中搜索它 if(k=-1)/若未找到插入它 A.Insert(n,x);n+;第32页/共66页 void Intersection(SeqList&A,SeqList&B)int n=A.Length();int m=B.Length();int i=0;while(i n)int x=A.Get(i);/在A中取一元素 int k=B.Find(x);/在B中搜索它if(k=-1)A.Remove(i);n-;else i+;/未找到在A中删除它 顺序表的应用:顺序表的应用:集合的集合的“
16、交交”运算运算第33页/共66页稀疏矩阵稀疏矩阵(Sparse Matrix)非零元素个数非零元素个数远远少于矩阵元素个数远远少于矩阵元素个数第34页/共66页稀疏矩阵的抽象数据类型稀疏矩阵的抽象数据类型template class SparseMatrix;template class Trituple /三三元组元组friend class SparseMatrix private:int row,col;/非零元素行号非零元素行号/列号列号 Type value;/非零元素的值非零元素的值template class SparseMatrix/稀疏矩阵类定义稀疏矩阵类定义 第35页/共6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构第02章 清华 殷人昆版 数据结构 02 清华 殷人昆版
限制150内