2010-11-10 141 views
2

我读的数据结构,看看栈和队列,但我不明白的计算机系统或网络的发展或具体问题的足够的例子,我应该使用堆栈或队列或树等堆栈和队列的使用情况?

+0

你的任务是给出使用堆栈,队列还是树木的例子,或许? – 2010-11-10 15:25:00

+0

没有一个任务,我只是好奇。此外,我不是一个大学生。 – 2010-11-10 15:25:44

+2

哈哈-1好奇。反正至少我有一些答案。 – 2010-11-10 15:27:16

回答

3

大多数(所有?)编程语言都使用堆栈来跟踪调用子例程时程序的状态。

说明:您的程序代码存储在主内存中。 CPU有一个指令指针,它总是指向下一条将被执行的指令。当一条指令被执行时,这个指针加1,指向下一条指令。

当你的程序进入子程序时,指令指针会跳转到其他地址。当这个例程完成时,它必须知道它离开的位置。所以,跳转前的最后一个地址被压入堆栈。功能完成后,堆栈中最顶端的项目就是该地址。

这也是过度递归可能导致堆栈溢出的原因。太多的嵌套调用导致堆栈上的许多返回地址被压入,但没有被删除。

Wikipedia上阅读更多。

树可以用于很多事情,例如binary search trees

+0

您可以描述“在调用子例程时跟踪程序的状态” – 2010-11-10 15:33:09

+0

@sushil:为调用堆栈添加解释和链接。 – 2010-11-10 15:40:41

3

队列是常见的事等。无论需要以先到先得的原则处理。网络数据包,I/O请求等。

当您需要重新使用您放置的最后一个项目时,您需要一个堆栈。我无法从帽子顶部找到一个很好的例子,但它用于例如在将常规数学表达式转换为RPN或在图形中进行深度优先搜索时存储节点。

2

队列 - 先入先出,用于数据的密集处理。可以用于按排序顺序处理任务。 堆栈与Queue - Last In First Out,最常用的示例 - 方法调用堆栈相反。

+0

可以请您详细说明方法调用堆栈吗? – 2010-11-10 15:32:09

+7

@sushil - 一个简单的LIFO例子呢?想想你的文字处理器中的撤消功能。您需要存储您所做的每件事,以便稍后可以撤消它,并且当您访问它时,您希望从最后一个项目(堆栈顶部)开始并向后回溯到第一个项目。 – JohnFx 2010-11-10 15:44:25

+0

@JohnFx - 很好的例子! – dexter 2010-11-10 16:00:54

0

堆栈删除和插入在同一端执行。所以它被称为后进先出。在堆栈中,只有一个指针被称为TOP。没有浪费存储空间

在队列中删除和插入在两端执行。所以它被称为先进先出。在队列中,两个指针称为FRONT和REAR.Wastage的内存空间。