9.将线性表L中第诠个数据元素删除 int ListDelete(sQ list L,int i, Entry Type *e) if( empty(L) return Error;/检测线性表是否为 if(<|>L> length)) return ERROR;/检查值是否合 理 e=L→> item-1l;/将欲删除的数据元素内容保留在e 所指示的存储单元中 for(jij<=L> ength-1+)/)线性表第计1个元素之 后的所有元素向前移动 L->item j-1FL->item L->length--i return OK: 西顺大学教学与信息学院
9. ᇚ㒓ᗻ㸼LЁiϾ᭄ܗ㋴ߴ䰸 int ListDelete(SQ_LIST *L,int i,EntryType *e) { if (IsEmpty(L)) return ERROR; //Ẕ⌟㒓ᗻ㸼ᰃ৺Ў ぎ if (i<1||i>L->length) return ERROR; //Ẕᶹiؐᰃ৺ড় ⧚ *e=L->item[i-1]; //ᇚ℆ߴ䰸ⱘ᭄ܗ㋴ݙᆍֱ⬭e ᠔ᣛ⼎ⱘᄬټऩܗЁ for (j=i;j<=L->length-1;j++) //ᇚ㒓ᗻ㸼i+1Ͼܗ㋴П ࡼ鼠ࠡ㋴ܗ᳝ⱘ᠔ৢ L->item[j-1]=L->item[j]; L->length--; return OK; }
插入算法的分析 假设线性表中含有n个数据元素,在进行插入操作 时,若假定在n+1个位置上插入元素的可能性均等,则 平均移动元素的个数为: n IS- n n+1 l三 西顺大学教学与信息学院
ᦦܹㅫ⊩ⱘߚᵤ ؛䆒㒓ᗻ㸼Ё᳝nϾ᭄ܗ㋴ˈ䖯㸠ᦦܹ᪡ ᯊˈ㢹؛ᅮn+1Ͼԡ㕂Ϟᦦܹܗ㋴ⱘৃ㛑ᗻഛㄝˈ߭ ᑇഛ⿏ܗࡼ㋴ⱘϾ᭄Ў˖ å + = - + = + = n 1 i 1 is 2 n (n i 1) n 1 1 E
删除算法的分析 在进行删除操作时,若假定删除每个元素的可能 性均等,则平均移动元素的个数为: Ed=-∑(n-)= 分析结论 顺序存储结构表示的线性表,在做插入或删除操 作时,平均需要移动大约一半的数据元素。当线性表 的数据元素量较大,并且经常要对其做插入或删除操 作时,这一点需要值得考虑。 西顺大学教学与信息学院
ߴ䰸ㅫ⊩ⱘߚᵤ 䖯㸠ߴ䰸᪡ᯊˈ㢹؛ᅮߴ䰸↣Ͼܗ㋴ⱘৃ㛑 ᗻഛㄝˈ߭ᑇഛ⿏ܗࡼ㋴ⱘϾ᭄Ў˖ ᵤ㒧䆎ߚ 乎ᑣᄬټ㒧ᵘ㸼⼎ⱘ㒓ᗻ㸼ˈخᦦܹߴ䰸᪡ ᯊˈᑇഛ䳔㽕⿏ࡼ㑺ϔञⱘ᭄ܗ㋴DŽᔧ㒓ᗻ㸼 ⱘ᭄ܗ㋴䞣䕗ˈᑊϨ㒣ᐌ㽕ᇍ݊خᦦܹߴ䰸᪡ ᯊˈ䖭ϔ⚍䳔㽕ؐᕫ㗗㰥DŽ å = - = - = n i 1 dl 2 n 1 (n i) n 1 E
23线性表的链式存储结构 线性表顺序存储结构的特点 它是一种简单、方便的存储方式。它要求线性表 的数据元素依次存放在连续的存储单元中,从而利用 数据元素的存储顺序表示相应的逻辑顺序,这种存储 方式属于静态存储形式 暴露的问题 ●在做插入或删除元素的操作时,会产生大 量的数据元素移动; 对于长度变化较大的线性表,要一次性地 分配足够的存储空间,但这些空间常常又得不到充分 的利用 线性表的容量难以扩充 西顺大学教学与信息学院
2.3 㒓ᗻ㸼ⱘ䫒ᓣᄬټ㒧ᵘ 㒓ᗻ㸼乎ᑣᄬټ㒧ᵘⱘ⡍⚍ ᅗᰃϔ⾡ㅔऩǃᮍ֓ⱘᄬټᮍᓣDŽᅗ㽕∖㒓ᗻ㸼 ⱘ᭄ܗ㋴ձᄬᬒ䖲㓁ⱘᄬټऩܗЁˈҢ㗠߽⫼ ᭄ܗ㋴ⱘᄬټ乎ᑣ㸼⼎Ⳍᑨⱘ䘏䕥乎ᑣˈ䖭⾡ᄬټ ᮍᓣሲѢ䴭ᗕᄬټᔶᓣDŽ ᲈ䴆ⱘ䯂乬 l خᦦܹߴ䰸ܗ㋴ⱘ᪡ᯊˈӮѻ⫳ ˗ࡼ鼠㋴ܗ䞣ⱘ᭄ l ᇍѢ䭓ᑺব࣪䕗ⱘ㒓ᗻ㸼ˈ㽕ϔᗻഄ ߚ䜡䎇ⱘᄬټぎ䯈ˈԚ䖭ѯぎ䯈ᐌᐌজᕫϡߚܙࠄ ˗⫼߽ⱘ l 㒓ᗻ㸼ⱘᆍ䞣䲒ҹᠽܙDŽ
线性表的链式存储结构 线性表的链式存储结构是指用一组任意的存储单 元(可以连续,也可以不连续)存储线性表中的数据 元素。为了反映数据元素之间的逻辑关系,对于每个 数据元素不仅要表示它的具体内容,还要附加一个表 示它的直接后继元素存储位置的信息。假设有一个线 性表(a,b,c,d),可用下图22所示的形式存储: 西顺大学教学与信息学院
㒓ᗻ㸼ⱘ䫒ᓣᄬټ㒧ᵘ 㒓ᗻ㸼ⱘ䫒ᓣᄬټ㒧ᵘᰃᣛ⫼ϔ㒘ӏᛣⱘᄬټऩ ܗৃ˄ҹ䖲㓁ˈгৃҹϡ䖲㓁˅ᄬټ㒓ᗻ㸼Ёⱘ᭄ ܗ㋴DŽЎњড᭄ܗ㋴П䯈ⱘ䘏䕥݇㋏ˈᇍѢ↣Ͼ ᭄ܗ㋴ϡҙ㽕㸼⼎ᅗⱘԧݙᆍˈ䖬㽕䰘ࡴϔϾ㸼 ⼎ᅗⱘⳈৢ㒻ܗ㋴ᄬټԡ㕂ⱘֵᙃDŽ؛䆒᳝ϔϾ㒓 ᗻ㸼˄a,b,c,d˅ˈৃ⫼ϟ2-2᠔⼎ⱘᔶᓣᄬټ˖