第2章线性表 本章主要介绍下列内容 线性表的定义和基本操作 线性表的顺序存储结构 线性表的链式存储结构 线性表的应用举例 西顺大学教学与信息学院 退出
ぜ2【 ㏮ᕖ㶗 ᴀゴЏ㽕ҟ㒡ϟ߫ݙᆍ l 㒓ᗻ㸼ⱘᅮНᴀ᪡ l 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ l 㒓ᗻ㸼ⱘ䫒ᓣᄬټ㒧ᵘ l 㒓ᗻ㸼ⱘᑨ⫼В՟ ߎ䗔
2,1线性表的定义和基本操作 2,2线性表的顺序存储结构 2.3线性表的链式存储结构 2.4线性表的应用举例 西顺大学教学与信息学院
2.1 㒓ᗻ㸼ⱘᅮНᴀ᪡ 2.2 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ 2.3 㒓ᗻ㸼ⱘ䫒ᓣᄬټ㒧ᵘ 2.4 㒓ᗻ㸼ⱘᑨ⫼В՟
21线性表的定义和基 本操作 2.1.1线性表的定义 线性表是由n(n≥0)个类型相同的数据元素组成 的有限序列。通常表示成下列形式: L=(aj, a2 a;i s a; a, i+1geeegan 其中:L为线性表名称,习惯用大写书写; 为组成该线性表的数据元素,习惯用小写书写; 线性表中数据元素的个数被称为线性表的长度, 当n=0时,线性表为空,又称为空线性表。 西顺大学教学与信息学院
2.1 㒓ᗻ㸼ⱘᅮН ᴀ᪡ 2.1.1 㒓ᗻ㸼ⱘᅮН 㒓ᗻ㸼ᰃ⬅n˄nı0˅Ͼ㉏ൟⳌৠⱘ᭄ܗ㋴㒘៤ ⱘ᳝䰤ᑣ߫DŽ䗮ᐌ㸼⼎៤ϟ߫ᔶᓣ˖ L=( a1 , a2 ,...,ai-1,ai ,ai+1,...,an ) ݊Ё˖LЎ㒓ᗻ㸼ৡ⿄ˈдᛃ⫼ݭкݭ˗ aiЎ㒘៤䆹㒓ᗻ㸼ⱘ᭄ܗ㋴ˈдᛃ⫼ᇣݭкݭ˗ 㒓ᗻ㸼Ё᭄ܗ㋴ⱘϾ᭄㹿⿄Ў㒓ᗻ㸼ⱘ䭓ᑺˈ ᔧn=0ᯊˈ㒓ᗻ㸼Ўぎˈজ⿄Ўぎ㒓ᗻ㸼DŽ
举例 La=(34,89,765,12,90,-34,22)数据元 素类型为int Ls=("Hly; World"," China"," Welcome")数据 元素类型为 string Lb=( book,, book, book)数据元素类型为下列 所示的结构类型: struct bookinfo int No: 图书编号 char *names /图书名称 char *auther ∥作者名称 西顺大学教学与信息学院
В՟ La=˄34ˈ89ˈ765ˈ12ˈ90ˈ-34ˈ22˅ ᭄ܗ ㋴㉏ൟЎintDŽ Ls=(²Hello² , ²World² , ²China² , ²Welcome²) ᭄ ܗ㋴㉏ൟЎstringDŽ Lb=(book1 ,book2 ,...,book100) ᭄ܗ㋴㉏ൟЎϟ߫ ᠔⼎ⱘ㒧ᵘ㉏ൟ˖ struct bookinfo{ int No; //к㓪ো char *name; //кৡ⿄ char *auther; //㗙ৡ⿄ ...; }
2.1.2线性表的基本操作 1.初始化线性表 L Initlis(U 2.销毁线性表 L Destory list(l) 3.清空线性表 L Clearlisti(L 4.求线性表L的长度 Listlength(L) 5.判断线性表L是否为空 IsEp① 6.获取线性表L中的某个数据元素内容 GetElem(L,i, e) 7.检索值为e的数据元素 Locateelem(L,e) 8.返回线性表L中e的直接前驱元素 Priorelem(L,e) 9.返回线性表L中e的直接后继元素 Nextelem(L,e) 10.在线性表L中插入一个数据元素 ListInsert(l,i,e) 1l.删除线性表L中第个数据元素 ListDelete(Lie) 西顺大学教学与信息学院
2.1.2 㒓ᗻ㸼ⱘᴀ᪡ 1. ߱ྟ࣪㒓ᗻ㸼L InitList(L) 2. 䫔↕㒓ᗻ㸼L DestoryList(L) 3. ⏙ぎ㒓ᗻ㸼L ClearList(L) 4. ∖㒓ᗻ㸼Lⱘ䭓ᑺ ListLength(L) 5. ߸ᮁ㒓ᗻ㸼Lᰃ৺Ўぎ IsEmpty(L) 6. 㦋প㒓ᗻ㸼LЁⱘᶤϾ᭄ܗ㋴ݙᆍ GetElem(L,i,e) 7. Ẕ㋶ؐЎeⱘ᭄ܗ㋴ LocateELem(L,e) 8. 䖨ಲ㒓ᗻ㸼LЁeⱘⳈࠡ偅ܗ㋴ PriorElem(L,e) 9. 䖨ಲ㒓ᗻ㸼LЁeⱘⳈৢ㒻ܗ㋴ NextElem(L,e) 10. 㒓ᗻ㸼LЁᦦܹϔϾ᭄ܗ㋴ ListInsert(L,i,e) 11. ߴ䰸㒓ᗻ㸼LЁiϾ᭄ܗ㋴ ListDelete(L,i,e)
22线性表的顺序存储结构 22.1线性表的顺序存储结构 线性表的顺序存储结构是指用一组连续的存储单 元依次存储线性表中的每个数据元素。如下图2-1所 西顺大学教学与信息学院
2.2 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ 2.2.1 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘᰃᣛ⫼ϔ㒘䖲㓁ⱘᄬټऩ ܗձᄬټ㒓ᗻ㸼Ёⱘ↣Ͼ᭄ܗ㋴DŽབϟ2-1᠔ ⼎˖
存储地址内存单元 d+L d+2L aaa d+(-)L d+(n-1)L a 图2-1线性表顺序存储结构示意图 西顺大学教学与信息学院
ܗᄬऩݙ ഔഄټᄬ ... d a1 d+L a2 d+2L a3 ... d+(i-1)L a i ... d+(n-1)L a n ... ... 2-1 㒓ᗻ㸼乎ᑣᄬټ㒧ᵘ⼎ᛣ
其中,L为每个数据元素所占据的存储单元数目。 相邻两个数据元素的存储位置计算公式 LOC(a+1=LoC(ai +L 线性表中任意一个数据元素的存储位置的计算公 式为: LOC(a+=LoC(a+(i-1)L 顺序存储结构的特点 (1)利用数据元素的存储位置表示线性表中相邻 数据元素之间的前后关系,即线性表的逻辑结构与存 储结构(物理结构)一致; 西顺大学教学与信息学院
݊ЁˈLЎ↣Ͼ᭄ܗ㋴᠔ऴⱘᄬټऩܗ᭄ⳂDŽ Ⳍ䚏ϸϾ᭄ܗ㋴ⱘᄬټԡ㕂䅵ㅫ݀ᓣ LOC(ai+1)=LOC(ai )+L 㒓ᗻ㸼ЁӏᛣϔϾ᭄ܗ㋴ⱘᄬټԡ㕂ⱘ䅵ㅫ݀ ᓣЎ˖ LOC(ai+1)=LOC(a1 )+(i-1)*L 乎ᑣᄬټ㒧ᵘⱘ⡍⚍ ˄1˅߽⫼᭄ܗ㋴ⱘᄬټԡ㕂㸼⼎㒓ᗻ㸼ЁⳌ䚏 ᭄ܗ㋴П䯈ⱘࠡৢ݇㋏ˈे㒓ᗻ㸼ⱘ䘏䕥㒧ᵘϢᄬ ټ㒧ᵘ˄⠽⧚㒧ᵘ˅ϔ㟈˗
(2)在访问线性表时,可以利用上述给出的数学 公式,快速地计算出任何一个数据元素的存储地址。 因此,我们可以粗略地认为,访问每个数据元素所花 费的时间相等。这种存取元素的方法被称为随机存取 法,使用这种存取方法的存储结构被称为随机存储结 构。 在C语言中,实现线性表的顺序存储结构的类型定 义 # define lIst maX length100线性表的 最大长度 typedef struct 素的[ryye+iem;指向存放线性表中数据元 Entr int length;线性表的当前长度 JSQ LIST 西顺大学教学与信息学院
˄2˅䆓䯂㒓ᗻ㸼ᯊˈৃҹ߽⫼Ϟ䗄㒭ߎⱘ᭄ᄺ ݀ᓣˈᖿ䗳ഄ䅵ㅫߎӏԩϔϾ᭄ܗ㋴ⱘᄬټഄഔDŽ ℸˈ៥Ӏৃҹ㉫⬹ഄ䅸Ўˈ䆓䯂↣Ͼ᭄ܗ㋴᠔㢅 䌍ⱘᯊ䯈ⳌㄝDŽ䖭⾡ᄬপܗ㋴ⱘᮍ⊩㹿⿄Ў䱣ᴎᄬপ ⊩ˈՓ⫼䖭⾡ᄬপᮍ⊩ⱘᄬټ㒧ᵘ㹿⿄Ў䱣ᴎᄬټ㒧 ᵘDŽ C䇁㿔Ёˈᅲ⦄㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘⱘ㉏ൟᅮ Н #define LIST_MAX_LENGTH 100 //㒓ᗻ㸼ⱘ ᳔䭓ᑺ typedef struct { EntryType *item; //ᣛᄬᬒ㒓ᗻ㸼Ё᭄ܗ ㋴ⱘഄഔ int length; //㒓ᗻ㸼ⱘᔧࠡ䭓ᑺ }SQ_LIST˗
222典型操作的算法实现 1.初始化线性表L int InitList(SQ LIST L) L->item= Entry Type )malloc(LIST MAX LENGtH *sizeof(Entry Type);∥分配空间 if(L->item=NULI) return Error;∥若分配空间不 成功,返回 ERROR L->length=0; ∥将当前线性表长度置0 return OK ∥成功返回OK 西顺大学教学与信息学院
2.2.2 ൟ᪡ⱘㅫ⊩ᅲ⦄ 1. ߱ྟ࣪㒓ᗻ㸼L int InitList(SQ_LIST *L) { L->item=(EntryType*)malloc(LIST_MAX_LENGTH *sizeof(EntryType)); //ߚ䜡ぎ䯈 if (L->item==NULL) return ERROR; //㢹ߚ䜡ぎ䯈ϡ ៤ࡳˈ䖨ಲERROR L->length=0; //ᇚᔧࠡ㒓ᗻ㸼䭓ᑺ㕂0 return OK; //៤ࡳ䖨ಲOK }