笔趣阁

富士小说>离语ovo > 第310章 有毛病(第3页)

第310章 有毛病(第3页)

a顺序表是使用一维数组实现的线性表

b顺序表必须占用一片连续的存储单元

c顺序表的空间利用率高于链表

d在链表中,每个结点只有一个链域

【o年】已知表头元素为c的单链表在内存中的存储状态如下表所示

假设该链表只给出了头指针ist。在不改变链表的前提下,请设计一个尽可能高效的算

法,查找链表中倒数第k个位置上的结点k为正整数。若查找成功,算法输出该结点的

data域的值,并返回;否则,只返回o。要求:

描述算法的基本设计思想;

描述算法的详细实现步骤;

根据设计思想和实现步骤,采用程序设计语言描述算法(使用c、c++语言实现),

关键之处请给出简要注释。

()算法的基本设计思想:

问题的关键是设计一个尽可能高效的算法,通过链表的一趟遍历,找到倒数第k个结

点的位置。算法的基本设计思想是:定义两个指针变量p和q,初始时均指向头结点的下。

如图(d)所示,当|t-t|==时,表示共享栈满。那么大家可能会问一个问题,反正

就是这么一块空间,那我们二一添作五,直接均分不就行了(你好,我好,大家好,一片和

谐,此处应该有掌声)。均分看似合理,其实会导致很大问题,大家请想一下,程序的执行

是不确定的,也是不均衡的(好像说的有点玄乎),有的程序需要的空间大,有的程序需要

的空间小,图(b)中表示的是栈占用的空间的大一些;图(b)中表示的是栈占用的

空间的大一些,如果均分,就会出现旱涝不均,图(b)中栈就会旱死(空间不够,而报

错),图(c)中栈就会旱死(空间不够,而报错)。

括号匹配问题

在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是

否相匹配?

匹配思想:从左至右扫描一个字符串或表达式,则每个右括号将与最近遇到的那个左

括号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个

右括号时,就将它与栈顶的左括号如果存在相匹配,同时从栈顶删除该左括号。

算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹

出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回fse。

栈与递归调用的实现

栈的另一个重要应用是在程序设计语言中实现递归调用。递归调用:一个函数或过程

直接或间接地调用自己本身,简称递归recursive。为了使递归调用不至于无终止地进行下

去,实际上有效的递归调用函数或过程应包括两部分:递推规则方法,终止条件,初始。

喜欢离语请大家收藏:dududu离语小说网更新度全网最快。

已完结热门小说推荐

最新标签