2024年计算机考研算法必背100题.pdfVIP

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多

2024年计算机考研

算法必背100题

顺序表、栈、队列2

KMP44

树47

图78

查找、排序、其他算法87

408精选算法题100

1

顺序表、栈、队列

1.顺序表的插入元素操作

引入:如果我们要实现ListInsert(SeqList*L,inti,ElemTypee),即在顺序表L中的第i个

位置插入新元素e,应该如何操作?

1.如果插入位置不合理,结束程序,输出异常信息

2.如果线性表长度大于或者等于数组长度,结束程序,输出异常信息

3.从顺序表的最后一个元素开始向前遍历到第i个位置,依次将其向后移动一个位置。

4.将元素插入指定位置i处

5.表长增加1

下面在第三个存储位置插入元素作为例子,其中new为要插入的新元素。

//初始条件:顺序线性表L已存在,1≤i≤ListLength(L)

//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1

intListInsert(SeqList*L,inti,ElemType*e){

intk;

if(L-length==MAXSIZE)/*顺序线性表已经满*/

returnERROR;

if(i1||iL-length+1)/*当i不在范围内时*/returnERROR;

if(i=L-1ength){/*若插入数据位置不在表尾*/

for(k=L-length-1;k=i-1;k--)/*将要插入位置后的数据元素向后移动

一位*/

L-data[k+1]=L-data[k];

}

L-data[i-1]=e;/*将新元素插入*/

L-length++;

returnOK;

}

在上述代码中,核心语句为for循环里面的判断,对顺序表进行插入操作,应该先进

行位置移动,然后才能进行插入操作。所以顺序线性表的插入,时间复杂度为O(n)。

2

2.顺序表的删除元素操作

假如你要从一个顺序线性表删除某个元素,实现ListDelete(SqList*L,inti,ElemType*e),

即在L中的第i个位置删除一个元素e,应该如何操作呢?

首先整理算法思路:

1.如果删除的元素位置不正确,结束程序,输出异常信息

2.取出删除元素,放在元素e中

3.从删除元素位置开始遍历到最后一个元素位置,分别将它们向前移动一个位置

4.表长减去1

图2-8删除前

图2-9删除后

//初始条件:顺序线性表L已存在,1≤i≤List.Length(L)

//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1

intListDelete(SqList*L,inti,ElemType*e){

intk;

if(L-length==0)/*线性表为空*/

returnERROR;

if(i1||iL-length)/*删除位置不正确*/

returnERROR;

*e=L-data[i-1];

if(iL-1ength){/*如果删除不是最后位置*/

for(k=i;kL-length;k++)/*将删除位置后继元素前移*/

L-data[k-1]=L-data[k];

}

L-length--;

returnOK;

}

该删除算法关键步骤是:从删除元素位置开始遍历到最后一个元素位置,分别依次将它

们向前移动一个位置,然

文档评论(0)

远方 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档