队列、栈、链表简要介绍.doc

队列、栈、链表简要介绍.doc

ID:54701143

大小:44.50 KB

页数:5页

时间:2020-04-20

队列、栈、链表简要介绍.doc_第1页
队列、栈、链表简要介绍.doc_第2页
队列、栈、链表简要介绍.doc_第3页
队列、栈、链表简要介绍.doc_第4页
队列、栈、链表简要介绍.doc_第5页
资源描述:

《队列、栈、链表简要介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、队列、栈、链表简要介绍————拂晓队列、栈是两种编程中常用的线性数据结构,在某些问题中适时地使用队列或栈可以使问题的思路变得非常简单、清晰,下面分别介绍这两种数据结构。一队列:队列,就如其名字所表述的意思,就是排队,比如我们在食堂打饭排的队,第一个人在队头买饭,后面的人都在后面排着,第一个人走了,第二个人就变成队的头部,而如果有其他的同学过来打饭,那么他就要成为新的队尾,同时队伍长度也相应变长。如果我们把打饭排的队用一个整型数组a[N]表示,第一个学生是a[1],第i个学生是a[i],一开始第一个学生是队头,也就是a[1]为头,当第一个学生走了之后第二个学生就成了队头,也就是a[2]变

2、成了头,所以我们可以定义一个变量inthead,并将其初值赋成1,当一个学生走了之后就把它加1,这样就实现了一个学生走了之后后面的学生为新的队头,如果现在有m个学生,那么现在的队尾就是a[m],如果来了下一个学生,那么队尾就要变成a[m+1],所以可以再定义一个变量inttail,并赋初值0,因为最初是没有学生来买饭的,每当有一个学生到来,就将tail+1,这样就可以表示队伍的尾部又向后移了一位,由于head和tail都是随时变化的,所以想要判断一个队伍是否为空,需要判断head与tail的关系,如果它们相等,说明队首和队尾是同一个人,也就说明队伍里只有一个人,如果这个人走了,那么he

3、ad要加1,这时队伍里就正好没有人了,这时head和tail的关系为head>tail,这样我们就可以判断队伍是否为空了。二栈:栈表示一种后进先出的数据结构,类似于生活中“一摞”的东西,比如一摞盘子,最先放的在最下面,要最后才能取出,最后放的在最上面,可以直接取出并且每次只能取出最上面的那个,再比如一个乒乓球粗细的小筒,往里面放乒乓球,我们每次可以取出的是我们之前放入的最后一个球,如果同样用一个数组a[N]来表示这些筒中的乒乓球,a[1]表示第1个乒乓球,a[2]表示第二个乒乓球,…,用一个变量top来表示最上面的那个球,那么a[top]就指向最上面的乒乓球,如果只有一个top,我们就

4、只能找到最上面的乒乓球,这样就符合了栈的要求,这样我们就用一个数组表示了“一摞”乒乓球,也就是一个栈,当一个新的元素到来时,我们就将top加1,并将a[top]赋为新元素的值,当一个元素失去利用价值后,我们就将top减1,这样就等价于将这个元素从栈中删除了,为了防止意外修改栈中除栈顶以外的元素从而破坏逻辑,我们一般除了top外不使用其他变量去作为下标访问栈。再看一个例子:假设现在咱们的大校长为了知道计算机系学生算法的学习情况,那么他需要去问计算机的院长,计算机的院长大人又要去问院书记~,书记又要去问系主任,系主任又要去问导员,最后导员了解了学生算法的学习情况后,才能去把结果汇报给主任大

5、人,主任这里才能把结果反馈给书记同志~,书记再反馈给院长,最后院长才能把这个情况告诉校长同志。如果我们将上级给下级下达任务的过程看成这个下级领导入栈的过程,而下级向上级交任务的过程看成一个出栈的过程,就可以完全使用一个栈来模拟了上面的这个过程。在计算机中,这个过程其实就是函数调用的过程,当一个函数调用另一个函数的时候,被调用的函数的参数需要入栈,而当这个被调用函数再调用别的函数的时候,被它调用的函数的参数也要入栈,当一个函数完成它的任务需要返回的时候,在栈中存储的它的参数就出栈,这个栈由系统提供,在我们使用递归函数的时候,如果递归层次太深,可以很容易的就将这个栈给填满,从而造成栈溢出的

6、错误,所以有时我们可以自己分配一个栈,来模拟递归函数的过程,从而避免这样的错误。三链表:大家都学过数组,在定义数组的时候,系统为我们的数组分配了一块连续的空间,数组中相邻的元素,在内存中它们也是相邻的,可是这样有两个局限,一:是我们需要事先知道我们需要多少个元素的位置,才能定义一个数组,不便于内存的有效利用;二:相邻的两个元素在数组中的位置也必须相邻。如果我们定义一个结构体:structnode{intparam;intnext;};这里param是我们需要存储的变量值,next作为指向与一个node型变量相邻的下一个变量的位置,比如定义一个noden[100],如果n[0].next

7、=20,就是说与第0个变量相邻的是第20个变量,而不必须是与它紧挨着的第1个,这样这个结构体数组中的这些结构体变量就形成了一个逻辑上的链,避免了a[0]的下一个必须是a[1]的限制,使其使用更加灵活,这样的逻辑上抽象出来的链就叫做链表。使用数组实现逻辑上可以实现一个链表的功能,而且具有速度快、实现简单的优点,但有时链的长度不能确定,如果数组定义的很大,可能就会造成空间浪费,定义小了,又可能会不够用,这时就可以使用指针来实现一个链表,即将指向相邻

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。