您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 栈元素 >

描述如何用单向链表表示一个堆栈

发布时间:2019-07-07 18:11 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  为了最终确定这两个函数的调用模型,你还需要知道进出堆栈的数据是属于哪种类型的。也就是说,你得声明一个struct结构作为链表元素的数据类型。

  如果没有特殊要求,应该考虑使用无类型指针来实现一个通用的解决方案。基于无类型指针的struct结构和函数调用模型如下所示:

  push(压入)和pop(弹出)例程是每一种堆栈实现方案中都不可缺少的。

  要想把某个堆栈作为一个输入参数,最简单的办法莫过于在函数调用过程中传递一个指向该堆栈的指针。

  因为堆栈将被实现为一个单向链表,所以这个指向堆栈的指针就将是一个指向该链表第一个元素的指针。

  除这个指向堆栈的指针外,你还需要把那个将被压入堆栈的数据安排为push函数的第二个输入参数。

  pop函数看上去有一个指向某堆栈的指针作为其输入参数就已经足够了。但仔细想下,它还需要把从堆栈上弹出的数据值返回给它的调用者。

  注:在C语言里,你对传递给子函数作为其输入参数的某个指针所做出的修改时无法反映到其父函数里。要解决这一问题,你就必须把一个指针的指针传递给被调用例程作为参数。

  为了对其父函数中的堆栈指针做出修改,必须把一个指向堆栈指针的指针传递给例程push和pop作为输入参数。只有这样,你才能保证父函数中的堆栈指针正确地指向链表的头元素。考虑了这一因素的Push和pop调用模型如下。

  push里要为链表中的新元素动态地分配内存。内存分配是一项可能会失败的操作,所以在编写push例程的时候必须要检查这个内存分配操作是否成功。还需要把push操作是否成功通知给它的调用者。采用返回值表示push操作是否成功。

  pop要注意,不能对一个空堆栈进行弹出操作。所以它应该设置一个错误代码,当对空堆栈操作时,返回错误代码,那么弹出的数据放哪儿呢?放在输出参数里。

  push函数为新元素分配内存,检查内存分配操作是否失败,对新元素进行赋值,把新元素放到堆栈的栈顶,最后对堆栈指针做出调整。如下所示:

  pop函数先检查堆栈是否为空,然后取回栈顶元素中的数据值,对堆栈指针做出调整,在释放原堆栈元素所占用的内存。如下所示:

  // CreateStack函数将堆栈指针设为NULL,并返回一个表示操作成功的1

  DeleteStack函数可以用反复调用pop函数的办法来实现,但一边遍历堆栈数据结构一边是否个链表元素的办法将更有效率。在释放当前元素的时候,你需要使用一个临时指针来保存指向下一个元素的指针。这一点千万不要忘了。

http://advntravel.com/zhanyuansu/140.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有