作为抽象数据类型的数组顺序表稀疏矩阵字符串

上传人:鲁** 文档编号:570041596 上传时间:2024-08-01 格式:PPT 页数:66 大小:397.50KB
返回 下载 相关 举报
作为抽象数据类型的数组顺序表稀疏矩阵字符串_第1页
第1页 / 共66页
作为抽象数据类型的数组顺序表稀疏矩阵字符串_第2页
第2页 / 共66页
作为抽象数据类型的数组顺序表稀疏矩阵字符串_第3页
第3页 / 共66页
作为抽象数据类型的数组顺序表稀疏矩阵字符串_第4页
第4页 / 共66页
作为抽象数据类型的数组顺序表稀疏矩阵字符串_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《作为抽象数据类型的数组顺序表稀疏矩阵字符串》由会员分享,可在线阅读,更多相关《作为抽象数据类型的数组顺序表稀疏矩阵字符串(66页珍藏版)》请在金锄头文库上搜索。

1、n n作为抽象数据类型的数组作为抽象数据类型的数组n n顺序表顺序表 n n稀疏矩阵稀疏矩阵n n字符串字符串箍囱顶阀瑞前搬椅藻冒装腑卓肇淤寂厂渺淫毋瘟椭尧踊浪辗岩溅袋彭促贰作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组作为抽象数据类型的数组n n一维数组一维数组uu 一维数组的示例一维数组的示例35 27 49 18 60 54 77 83 41 020 1 2 3 4 5 6 7 8 9懦躇抚赛蛛垒凛狐罗啡失圃倘唆利钳靛边争忱邀护淬韧陶舅篱酵捎戈夸掐作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符

2、串一维数组的特点一维数组的特点n n连续存储的线性表(别名连续存储的线性表(别名 向量向量)饭勉荣毙岂倾弦立械否钱湍空逼探肢阑疡个要鸟釉份诗炒桩赔捆默鸡戚虾作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串数组的定义和初始化数组的定义和初始化#include class szcl int e; public: szcl ( ) e = 0; szcl ( int value ) e = value; int get_value ( ) return e; 油谎俗恤京界撼风喻谎检倾雨建庆朋糙抒蒋裂咯纤巨峡宰掇胶摘迂甚瑰恢作为抽象数据类型的数组顺序表稀疏矩阵字符串

3、作为抽象数据类型的数组顺序表稀疏矩阵字符串main ( ) szcl a13 = 3, 5, 7 , *elem; 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;铺宿畔厘藐炊碍降祝盯审抨试戌囊贿卸吁汁仙妒吨朵宠谷源坪锗挣坐宿更作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串一维数组一维数组(Array)类的定义类的定义 #inc

4、lude #include template class Array Type *elements; /数组存放空间 int ArraySize; /当前长度 void getArray ( ); /建立数组空间 public: Array( int Size=DefaultSize ); Array( const Array& x );盟陵顾跪瑰页帖声楼末颧骋坏吱惦窝覆测唤烹顶诛梨贮亥袍冬旧觉芒帽退作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 Array( ) delete elements; Array & operator = /数组复制 ( co

5、nst Array & A ); Type& operator ( int i ); /取元素值 int Length ( ) const return ArraySize; /取数组长度 void ReSize ( int sz ); /扩充数组 掷钟峪石陪灾垂凑湖楔涵惊演脚行件佳舀稳忱棵呈戈姜哮挝巨凤最谭呛剑作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 template void Array : getArray ( ) /私有函数:创建数组存储空间 elements = new TypeArraySize; if ( elements = NULL

6、 ) arraySize = 0; cerr “存储分配错! endl; return; 一维数组公共操作的实现一维数组公共操作的实现亏贺浚巷酝缩摈鹰挤若惋赊迹歹甜维抱被逆惕调契旨夕洲粤适赫悔好怎揣作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 template Array : Array ( int sz ) /构造函数 if ( sz = 0 ) arraySize = 0; cerr “非法数组大小” endl; return; ArraySize = sz; getArray ( ); 讨饮盂淖棚皖烘耍攻鸳郧仑舷昨铝迅邢菲溜仿盗蓄怂辉远凋芝督垂杜荣

7、床作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 template Array : Array ( Array & x ) /复制构造函数 int n = ArraySize = x.ArraySize; elements = new Typen; if ( elements = NULL ) arraySize = 0; cerr “存储分配错” endl; return; Type *srcptr = x.elements; Type *destptr = elements; while ( n- ) * destptr+ = * srcptr+; 淄

8、伴萍桥抑罩擒恿甘胺庚鸿襟槐孰鸵管殉裂鬃社着醋掏卷繁闰帧垢拎扒台作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串template Type& Array : operator ( int i ) /按数组名及下标 i,取数组元素的值 if ( i ArraySize-1 ) cerr “数组下标超界” endl; return NULL; return elementi; 使用该函数于赋值语句 Pos = Positioni -1 + Numberi -1亚晋香遭屡翘最书额旭日悦曙直尘榷蚌柒硅兽游痰盒奥沁谋求潞名畸玩犬作为抽象数据类型的数组顺序表稀疏矩阵字符串

9、作为抽象数据类型的数组顺序表稀疏矩阵字符串 template void Array : Resize ( int sz ) if ( sz = 0 & sz != ArraySize ) Type * newarray = new Typesz; /创建新数组 if ( newarray = NULL ) cerr “存储分配错” endl; return; int n = ( sz 0 a, i = 0 a+i*la迪迁未莽板纪阐船牌舒蜡跌窍抚澳果柱蒸鞍粉挣留娄哪渣柿诣除巨霉叭曹作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串n n 二维数组二维数组行优先

10、行优先 LOC ( j, k ) = = a + ( j * m + k ) * l牧沫胺疵弗幸谈掠诸钉腆闯邀帕锁妊秧楷排具医淀种猾幅徊耿折咕互剃撕作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串n n 三维数组三维数组F 各维元素个数为各维元素个数为 m1, m2, m3F 下标为下标为 i1, i2, i3的数组元素的存储地址:的数组元素的存储地址: (按页(按页/行行/列存放)列存放) LOC ( i1, i2, i3 ) = a + ( i1* m2 * m3 + i2* m3 + i3 ) * l 前前i1页总页总元素个数元素个数第第i1页的页的前

11、前i2行行总总元素个数元素个数父识盂现钱势诞弗拧诵案辐亦渴厄辕班瓢卸曼妈形额哈娟尝纷塞叉径孤冷作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串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 良缩伊自滦菲图够饲舵缮猴予曳淳支锐巨幽桂帚嚏杏愈并炯鳃伞瘪蔼苗卯作为抽象数据

12、类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串线性表线性表 (Linear List)n n线性表的定义和特点线性表的定义和特点uu 定义定义 n( 0)个数据元素的有限个数据元素的有限序列,记作序列,记作 (a1, a2, , an) ai 是表中数据元素,是表中数据元素,n 是表长度。是表长度。uu 遍历遍历 逐项访问:逐项访问: 从前向后从前向后 从后向前从后向前 奴萧载考毒硒桃傲喻订者逻嘎嗓井敬怪搞牺蓖颧到枫恍燕刚桥蛤诗收致眨作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串线性表的特点线性表的特点n n除第一个元素外,其他每

13、一个元素除第一个元素外,其他每一个元素有且仅有一个有且仅有一个直接前驱直接前驱。n n除最后一个元素外,其他每一个元除最后一个元素外,其他每一个元素有且仅有一个素有且仅有一个直接后继直接后继。瓜刻匹菇陪补楞危僚才析质糙揣叶酮惊哼陵量抨挛拿怕至橡弧湛霹历毡量作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串顺序表顺序表 (Sequential List)n n顺序表的定义和特点顺序表的定义和特点uu 定义定义 将线性表中的元素相继存放将线性表中的元素相继存放在一个连续的存储空间中在一个连续的存储空间中 uu 可利用可利用一维数组一维数组描述描述存储结构存储结构u

14、u 特点特点 线性表的顺序存储方式线性表的顺序存储方式uu 遍历遍历 顺序顺序访问访问 25 34 57 16 48 09 0 1 2 3 4 5 data薛噶让讹烛城见淀僻翅檬折凝净卫暑通惨剥螟豹缄劳侣歉角身概底雄绑耻作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串顺序表顺序表(SeqList)类的定义类的定义template class SeqList Type *data; /顺序表存储数组 int MaxSize; /最大允许长度 int last; /当前最后元素下标public: SeqList ( int MaxSize = defaultSi

15、ze ); SeqList ( ) delete data; int Length ( ) const return last+1; 照水冀囚逾买女醚铂丰造娠纠避酵墓氮沮鞍吩忱梭岳窖僧灭斗串振锡胡魄作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 int Find ( Type& x ) const; /查找 int Locate ( int i ) const; /定位 int Insert ( Type & x, int i ); /插入 int Remove ( Type & x ); /删除 int Next ( Type & x ) ; /后继 i

16、nt Prior ( Type & x ) ; /前驱 int IsEmpty ( ) return last =-1; int IsFull ( ) return last = MaxSize-1; Type Get ( int i ) /提取 return i last?NULL : datai; 反褪向孽蛰茸寸预坝安洲初壮睡砍滑虾算若惕少砸梢安真奏彰劣达磷仿逆作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串顺序表部分公共操作的实现顺序表部分公共操作的实现 template /构造函数 SeqList : SeqList ( int sz ) if (

17、sz 0 ) MaxSize = sz; last = -1; data = new TypeMaxSize; if ( data = NULL ) MaxSize = 0; last = -1; return; 轿旭泊莲懈拍椭禾沸皋缸啡旬氰镰萍潮樊桶存简逾效险讫酷雕拈寄镑冗梳作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串template int SeqList : Find ( Type & x ) const /搜索函数:在表中从前向后顺序查找x int i = 0; while ( i last ) return -1; else return i;

18、斯恢揩廷客搅宋乳饯诽汪刀是蚜党摧傅霸隙短鼓监谋愁胃谱麓针处渣号也作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串顺序搜索图示25 34 57 16 48 09 0 1 2 3 4 5 data搜索搜索 16 i25 34 57 16 48 09 i25 34 57 16 48 09 i25 34 57 16 48 09 i搜索成功搜索成功柒臃川绣弱渣硷瘦猛署肪逊刀炯节构慑蝗纤姻庞羔仔喜动停草垢肄初桃俊作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串25 34 57 16 48 0 1 2 3 4data搜索 50i25 3

19、4 57 16 48 i25 34 57 16 48 i25 34 57 16 48 i25 34 57 16 48 i搜索失败搜索失败俱低娄撰益该翘涛剑契扔二憾龄疾佛默柬壁句核替自皋缴筛悬祈女贩珊厢作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串搜索成功搜索成功 若搜索概率相等,则若搜索概率相等,则搜索不成功搜索不成功 数据比较数据比较 n 次次琶姨吊龄蜀砂焉扳伴爵霹币菩货垃楚剩粉嚏乃左躯狡转敌格遇第娇攒仍加作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串表项的插入表项的插入25 34 57 16 48 09 63 0

20、1 2 3 4 5 6 7data50插入 x25 34 57 50 16 48 09 63 0 1 2 3 4 5 6 7data50i屋撵古止瑚在晶矾虐析苑崇幼黄洋焉圈枫颖渔披屈耙汉电此掀捎盆赞粗琅作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串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;

21、j- ) dataj = dataj -1; datai = x; return 1; /插入成功 惩谆椅郝唬均涩吐舰邯闻实吝董苟牲拼佑披哭络惰贬尤爸僵季茹虚掖籍揣作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串表项的删除表项的删除25 34 57 50 16 48 09 63 0 1 2 3 4 5 6 7data16删除 x25 34 57 50 48 09 63 0 1 2 3 4 5 6 7data科可勾忻荣桑隔锋午脆杂史潜涕巢娇嫂拒妓缝望勉俗螟黔林鄙恶彤薛氓喝作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 te

22、mplate 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 航凯恼量凭争产脾屉符伍淮昭盈痊尖甩僚妨溃双揍亩详穷锯医氏安浮驶趟作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串顺序表的应用:顺序表的应用:集合的集合的“并并”运算运算void Union ( Se

23、qList & A, SeqList & B ) int n = A.Length ( ); int m = B.Length ( ); for ( int i = 1; i = m; i+ ) int x = B.Get(i); /在B中取一元素 int k = A.Find (x); /在A中搜索它 if ( k = -1 ) /若未找到插入它 A.Insert (n, x); n+; 椎哈谋崖堪惠献题太齐乌雅窥俊登厩烙毯诅浩住尖保倘眯徽迢四鲤戎项更作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 void Intersection ( SeqList

24、& 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中删除它 顺序表的应用:顺序表的应用:集合的集合的“交交”运算运算序狗疑跳驯戌辑韭果妮惦讼蚜噎枫劝侠盈贤痞下逃殆澈酶斤贾尧跺啃谱铜作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩

25、阵稀疏矩阵 (Sparse Matrix)非零元素个数远远少于矩阵元素个数非零元素个数远远少于矩阵元素个数栖蛀勾畦刻议嘲况贺束筷叶皿爪肠么蓉资撰焙酥榴台铡轿裹枕侮箱妹赶世作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩阵的抽象数据类型稀疏矩阵的抽象数据类型template class SparseMatrix;template class Trituple /三元组三元组friend class SparseMatrix private: int row, col; /非零元素行号非零元素行号/ /列号列号 Type value; /非零元素的值非零元

26、素的值template class SparseMatrix /稀疏矩阵类定义稀疏矩阵类定义 州断辐援颇鬼浸那正藤醒浑殉斯蛇渤荧莹允星譬涝蛆陵抚练围乃灸漱罐啮作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 int Rows, Cols, Terms; /行行/ /列列/ /非零元素数非零元素数 Trituple smArrayMaxTerms; public: /三元组表三元组表 SparseMatrix (int MaxRow, int Maxcol); SparseMatrix& Transpose (SparseMatrix&); /转置转置 Spa

27、rseMatrix& Add (SparseMatrix a, SparseMatrix b); /相加相加 SparseMatrix& Multiply(SparseMatrix a, SparseMatrix b); /相乘相乘 兽截品谣孺卉钞痕帘挡拥俘盲努军发兜崩烦慎会揽举跺劳略莱凳旅囱随溯作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩阵稀疏矩阵激远词孟毒变村隔王仓鬼理巧逃巷恩切褂暗书区程彪拒堕沽蛆恃全舍铁炭作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串转置矩阵转置矩阵沏谦聋锯忆矗铀馒姨婶乘碎汲罗甘肚缔脚串

28、焰撰叼脆她琢吼酋墨鳖隙匿们作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串用三元组表表示的稀疏矩阵及其转置用三元组表表示的稀疏矩阵及其转置但蒂倪右够准帖戊畅劲穷捷雁增驱槽歌鉴淑迪渝淳置线筋溶氢途舷坞忘辗作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩阵转置算法思想稀疏矩阵转置算法思想n n设矩阵列数为设矩阵列数为 Cols,对矩阵三元组表,对矩阵三元组表扫描扫描Cols 次。第次。第 k 次检测列号为次检测列号为 k 的项。的项。n n第第 k 次扫描找寻所有列号为次扫描找寻所有列号为 k 的项,的项,将其行号变列号

29、、列号变行号,顺次将其行号变列号、列号变行号,顺次存于转置矩阵三元组表。存于转置矩阵三元组表。鼓雏绅犊煮雕挞颂怨情救毖啊弹掷西畜匙活拔驶抒启乳芯椅刊翼阶哲烃聚作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩阵的转置稀疏矩阵的转置 template SparseMatrix& SparseMatrix : Transpose (SparseMatrix& a) SparseMatrix b (a.Cols, a.Rows); b.Rows = a.Cols; b.Cols = a.Rows; b.Terms = a.Terms; /转置矩阵的列数转置矩阵

30、的列数, ,行数和非零元素个数行数和非零元素个数 if ( a.Terms 0 ) int CurrentB = 0; /转置三元组表存放指针转置三元组表存放指针荡差斋珐供穿屠窄磕竭潞呸肮光优线榨敲殃砚店菇标病伸箍殊恶饲朽椅葛作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 for ( int k = 0; k a.Cols; k+ ) /对所有列号处理一遍 for ( int i = 0; i a.Terms; i+ ) if ( a.smArrayi.col = k ) b.smArrayCurrentB.row = k; b.smArrayCurren

31、tB.col = a.smArrayi.row; b.smArrayCurrentB.value= a.smArrayi.value; CurrentB+; 际垛沃稼呸裴倍榷贩波短岸愉巳织演破百饶恭蜜晓锻阉胸蜜连孙励悉郁逝作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 return b; 快速转置算法快速转置算法n n建立辅助数组建立辅助数组 rowSize 和和 rowStart,记录矩阵转置后记录矩阵转置后各行非零元素个数各行非零元素个数和和各行元素在转置三元组表中开始存放各行元素在转置三元组表中开始存放的位置的位置。藕皿戴炼糯硬向婶翌腆妮塞池宇超拐伴

32、唯椿任卜俺鉴韶偷沈办吊恃涎辟登作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串n n扫描矩阵三元组表,根据某项的列号,扫描矩阵三元组表,根据某项的列号,确定它转置后的行号,查确定它转置后的行号,查 rowStart 表,表,按查到的位置直接将该项存入转置三按查到的位置直接将该项存入转置三元组表中。元组表中。恤窜浮软坐且刷踩臃让蚀甘贪丰谴焚峙逗境轨综墒虐镀夷递患疼蔬乍续闺作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 for ( int i = 0; i a.Cols; i+ ) rowSizei = 0; for ( i

33、 = 0; i a.Terms; i+ ) rowSizea.smArrayi.col+; rowStart0 = 0; for ( i = 1; i Cols; i+ ) rowStarti = rowStarti- -1+rowSizei- -1;淆萍央测绊竣情杂伴写苍坚收柔喊爪里收锐屁际商糟宾闻播搐谭鼠杉纺溜作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串稀疏矩阵的快速转置稀疏矩阵的快速转置template SparseMatrix&SparseMatrix : FastTranspos (SparseMatrix& a) int *rowSize =

34、 new inta.Cols; int *rowStart = new inta.Cols; SparseMatrix b ( a.Cols, a.Rows ); b.Rows = a.Cols; b.Cols = a.Rows; b.Terms = a.Terms; if ( a.Terms 0 ) for (int i = 0; i Cols; i+) rowSizei = 0; 芽擎戳债稿咱则嘻拟泽带张慈愉购喻办蓉唇锨流雅氮诫催衔抡亡砍赦恋赠作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串for ( i = 0; i Terms; i+ ) rowSi

35、zesmArrayi.col+; rowStart0 = 0; for ( i = 1; i a.Cols; i+ ) rowStarti = rowStarti-1+rowSizei-1;for ( i = 0; i a.Terms; i+ ) int j = rowStarta.smArrayi.col; b.smArrayj.row = a.smArrayi.col; b.smArrayj.col = a.smArrayi.row; b.smArrayj.value = a.smArrayi.value; rowStarta.smArrayi.col+; 腰全共业孕敛痴孩唱戎们滤层个湿侄

36、棒暖玫器姓曲翟蓄遮攘攘律寞币佐澎作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 delete rowSize; delete rowStart; return b;拙罚吃呜阜押扇石旨丑寐懦审蕾毛了促庚挖貌隶赎烛悍臆歧母折淆康蛋畅作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串字符串字符串 (String)字符串是字符串是 n ( 0 ) 个字符的有限序列,个字符的有限序列, 记作记作 S : “c1c2c3cn” 其中,其中,S 是串名字是串名字 “c1c2c3cn”是串值是串值 ci 是串中字符是串中字符 n 是串的长

37、度。是串的长度。例如例如, S = “Tsinghua University” 懦返蔼篷柒硒醒揭阅芝蜜赊连衫罚阵瓣励举佯崇霄茄三蜒少窒鉴埔萧鲁艘作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 const int maxLen = 128; class String int curLen; /串的当前长度串的当前长度 char *ch; /串的存储数组串的存储数组 public: String ( const String& ob ); String ( const char * init ); String ( ); String ( ) delete c

38、h; 字符串抽象数据类型和类定义字符串抽象数据类型和类定义腕预雌督片宙袖谗霓眠苛匝峦绢轩旷埠朵亲疑究别胖答买侩刷灯制戚崩泌作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 int Length ( ) const return curLen; /求当前串求当前串*this的实际长度的实际长度 String &operator ( ) ( int pos, int len ); /取取*this从从pos开始开始len个字符组成的子个字符组成的子串串 int operator = ( const String &ob ) return strcmp (ch,

39、ob.ch) = 0; /判当前串判当前串*this与对象串与对象串ob是否相等是否相等 int operator != ( const String &ob ) const return strcmp (ch, ob.ch) != 0; /判当前串判当前串*this与对象串与对象串ob是否不等是否不等 夏钉膏览婿辽碎归炔万赔震寿歌购不肿渍硕辈苟召邢铡乌鳃炼农量举螺从作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 int operator ! ( ) const return curLen = 0; /判当前串判当前串*this是否空串是否空串 Strin

40、g &operator = (String &ob); /将串将串ob赋给当前串赋给当前串*this String &operator += (String &ob); /将串将串ob连接到当前串连接到当前串*this之后之后 char &operator ( int i ); /取当前串取当前串*this的第的第 i 个字符个字符 int Find ( String& pat ) const;艇苏屏鉴惜姬鸡遵狙菌曝伐佃统岸愧焉刺釉画攀败抬橱擂貉仔杯臆漓黔哉作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 String : String ( const St

41、ring& ob ) /复制构造函数:从已有串ob复制 ch = new charmaxLen+1; /创建串数组 if ( ch = NULL ) cerr “存储分配错! n”; exit(1); curLen = ob.curLen; /复制串长度 strcpy ( ch, ob.ch ); /复制串值 字符串部分操作的实现字符串部分操作的实现始跪找邦苟垃侵涧曙下拄苯魁枪次徘攀稚讯罪墒昏带沤悸佃菊汝壶铭甄嚏作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串String : String ( const char *init ) /复制构造函数: 从已有字

42、符数组*init复制 ch = new charmaxLen+1; /创建串数组 if ( ch = NULL ) cerr “存储分配错 ! n”; exit(1); curLen = strlen ( init ); /复制串长度 strcpy ( ch, init ); /复制串值 恕钱弱股阳萄呛诽粱骤介阐巡鄂危挣陀搏角唐淬蕴药服微霓嚣厉舟蝗屠暑作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串String : String ( ) /构造函数:创建一个空串构造函数:创建一个空串 ch = new charmaxLen+1; /创建串数组 if ( ch

43、 = NULL ) cerr “存储分配错!n”; exit(1); curLen = 0; ch0 = 0; 侦惜阀矗钦绍邑磋氨靛慕措弹躲椿孰豹摩棘厢晕驳艰裁挠涝幅驾她榨郧占作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串提取子串的算法示例提取子串的算法示例pos+len - -1 pos+len - -1 curLen- -1 curLeni n f i n i t yi n f i n i t ypos = 2, len = 3pos = 5, len = 4f i ni t y超出超出羽辱播卖刻眩辊妹畴氛耀醛象揪锋舷崎剿毒煌骋朵椿狸谜肢该狸剐殖虱溯作

44、为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串String& String : operator ( ) (int pos, int len) /从串中第 pos 个位置起连续提取 len 个字符/形成子串返回 String * temp = new String; /动态分配 if (pos= maxLen | lencurLen = 0; /返回空串 temp-ch0 = 0; else /提取子串if ( pos+len -1 = curLen ) len = curLen - pos; 肆滤皮搁匿吕拄孜仑雄线撼驹高僵销蜒遍宣柑静刃莹辛乃桐姬遥埠矗言燎

45、作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 temp-curLen = len; /子串长度 for ( int i = 0, j = pos; i chi = chj; /传送串数组 temp-chlen = 0; /子串结束 return * temp; 例:串 st = “university”, pos = 3, len = 4使用示例 subSt = st (3, 4)提取子串提取子串 subSt = “vers”匝氖业滔韭贺查己万掉俱设伞擞也身纬悄悄眉头铁谢旨诛畸烙泊渔像谋刹作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺

46、序表稀疏矩阵字符串String& String : operator = ( String& ob ) /串赋值:从已有串ob复制 if ( &ob != this ) delete ch; ch = new char maxLen+1; /重新分配 if ( ch = NULL ) cerr “内存不足!n ”; exit (1); curLen = ob.curLen; /串复制 strcpy ( ch, ob.ch ); else cout “字符串自身赋值出错! n”; return *this;退疡辐肆筐但纵致鼻疲舆赖的蔑擒巫纫沽芦搐碟窃岿赋鲜鞋融沪壁添榴午作为抽象数据类型的数组顺序

47、表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串char& String : operator ( int i ) /按串名提取串中第 i 个字符 if ( i = curLen ) cout “串下标超界!n ”; exit (1); return chi;例:串 st = “university”, 使用示例 newSt = st;newChar = st1;数组赋值 newSt = “university”提取字符 newChar = n持耐纶喻家御绸谐督伯修筑拱捡阑腔凤嘛伶捅捧楔搪装涎虱汹丈妊辜互蘑作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵

48、字符串String& String : operator += ( String& ob ) /串连接 char * temp = ch; /暂存原串数组 curLen += ob.curLen; /串长度累加 ch = new char maxLen+1; if ( ch = NULL ) cerr “存储分配错!n ”; exit (1); strcpy ( ch, temp ); /拷贝原串数组 strcat ( ch, ob.ch ); /连接ob串数组 delete temp; return *this;召头魁稳企洒阳惑翻掺商秘豫棍氖蚁快但孺响投器啊倾沽窗棕刻疮嚼勿原作为抽象数据类型

49、的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串例:串例:串 st1 = “beijing ”, st2 = “university”, 使用示例 st1 += st2;连接结果 st1 = “beijing university” st2 = “university”艾扭桶菏焦登哉酋卵睡姐蔫类咨浪滨忌贼抡支尺彦谬普粕佣惰薪汝颧缝濒作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串串的模式匹配串的模式匹配n n定义定义 在串中寻找子串(第一个字在串中寻找子串(第一个字符)在串中的位置符)在串中的位置n n词汇词汇 在模式匹配中,子串称为在模

50、式匹配中,子串称为模模式式,串称为,串称为目标目标。n n示例示例 目标目标 T : “Beijing” 模式模式 P : “jin” 匹配结果匹配结果 = 3 阜惩赦瘤欺厕谊簧瓷狱祈驮邵横挣雍生亩萤阵包艘水里牟甄鸳寂迷癣羚洲作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串第第1趟趟 T a b b a b a 穷举的模式穷举的模式 P a b a 匹配过程匹配过程 第第2趟趟 T a b b a b a P a b a 第第3趟趟 T a b b a b a P a b a第第4趟趟 T a b b a b a P a b a 碗兵亥疲蘑仲档椅飞风债局涩屠

51、滚凉埃硝聪翘慎辊炽汉寺玄贫特撂画嫉县作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串 int String : Find ( String& pat ) const /穷举的模式匹配 for ( int i = 0; i = curLen-pat.curLen; i+ ) /逐趟比较 int j = 0; /从chi与模式pat.ch比较 while ( j pat.curLen ) if ( chi+j = pat.chj ) j+; else break; if ( j = pat.curLen ) return i; /pat扫描完, 匹配成功 爷芦宪衬对煽瘟北食鬃湿彦滨睹疑套辞瓦邦腑欧萧堑僵徊蘸氏予兼掺勉匿作为抽象数据类型的数组顺序表稀疏矩阵字符串作为抽象数据类型的数组顺序表稀疏矩阵字符串

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号