线性结构_栈结构

栈结构

       1. 栈(Stack)    一种受限的线性结构

            1. 特点:

                1. 只有一个口

                2. 先进后出,后进先出

                3. 元素按照进栈顺序从栈底排到栈顶

             2. 函数调用栈:

                  假如函数A调用函数B,函数B调用函数C

                  则在执行的过程中,先将A压入栈,由于A没有执行完,所以不会弹出栈,

                      然后A中调用了B函数,B函数也被压入栈,由于B没有执行完,所以不会弹出栈

                          然后A中调用了C函数,C函数也被压入栈,并且在栈顶,

                              随后C执行结束,C函数被弹出栈,

                                  紧接着B函数执行结束,B函数被弹出栈

                                      紧接,A函数执行结束,A函数弹出栈

                递归压栈(容易栈溢出)


 

   2. 栈相关的面试题

                1. 有六个元素6 5 4 3 2 1 顺序进栈,则下列不合法的出栈顺序为: ( )

                    A: 5 4 3 6 1 2              B: 4 5 3 2 1 6

                    C: 3 4 6 5 2 1              D: 2 3 4 1 5 6

                    答案为C, 注意身审题,栈中大数在下,小数在上,并且并不是说一次性全部进栈

        3. 栈结构的实现

                1. 栈结构的实现有两种方式(即存储数据的方法)

                    基于数组

                    基于链表

                2. 栈常见的操作方法

                    1. push()       添加一个新的元素到栈顶

                    2. pop()        从栈顶移除一个元素,并且将该元素返回

                    3. peek()       返回栈顶元素,此时栈没有被修改

                    4. isEmpty()    栈是都为空,为空返回true, 不为空返回false

                    5. size()       返回栈的长度,即栈中元素的个数

                    6. toString()   将栈结构中的内容以字符形式返回        

   4. 栈结构的函数封装

 1     // 1. 封装栈类
 2     function Stack(){
 3         // 栈的属性
 4         // 1. 初始化存储栈的数组
 5         this.items = [];
 6 
 7         // 2. 栈的简介
 8         /*************************************************/
 9         // 栈的相关操作方法
10         // 1. 将元素压入栈
11         Stack.prototype.enStack = function(element){
12             this.items.push(element);
13         }
14 
15         // 2. 从栈中取出元素
16         Stack.prototype.deStack = function(){
17             return this.items.pop();
18         }
19 
20         // 3. 查看栈顶元素
21         Stack.prototype.peek = function(){
22             return this.items[this.items.length - 1];
23         }
24 
25         // 4. 查看栈是否为空
26         Stack.prototype.isEmpty = function(){
27             return this.items.length == 0;
28         }
29 
30         // 5. 查看栈的元素个数
31         Stack.prototype.size = function(){
32             return this.items.length;
33         }
34 
35         // 6. 将栈中的内容以字符的形式返回
36         Stack.prototype.toString = function(){
37             // [1, 6, 4, 8, 9, 4] => "1 6 4 8 9 4"
38             var res = ""
39             for(var i = 0; i < this.items.lenght; i++){
40                 res += this.items[i] + " ";
41             }
42             return res;
43         }
44     }
View Code

 

 

posted @ 2020-01-20 14:40  CarreyB  阅读(545)  评论(0编辑  收藏  举报