作者: 旺仔_100 | 来源:发表于2020-06-21 11:14 被阅读0次

一、堆栈(链表实现)


堆栈.jpg

这种栈只有一个入口,它也是出口。从入口把数据放进去,取的时候只能取出最上面的数据。了解了数据结构,在看来代码就很简单了。

/**
 * 把元素放到栈顶,然后每次从栈顶取元素
 */
class Stack {
    //他有两个成员变量  一个是size N   一个是first 节点

    private var N  = 0;
    private var first : Node? = null;

     class Node(var content: String, var next : Node?)

    //压站
    fun pop(content : String){
       //这里其实可以专门写个添加first的方法,然后做判断的
        if (first == null){
            first = Node(content,null)
            return
        }
        val olderFirst = first
        first = Node(content, olderFirst)
        N++
    }

    //出栈
    fun push() : String?{
        val content = first?.content
        first = first?.next
        N--
        return content
    }
   //栈是否为空
   fun isEmpty() : Boolean{
        return first == null
    }

    fun getSize() : Int{
        return N
    }

}

写了一个最简易的栈,看下如何使用

        var stack = Stack()
       //压栈
        stack.pop("1")
        stack.pop("2")
        stack.pop("3")
        stack.pop("4")
        stack.pop("5")
        stack.pop("6")

      //其实可以在Stack里面写个迭代器,迭代打印。不会的可以看下面例子的代码
        for (i in 0 .. stack.getSize()){
            //出栈
            Log.d("azy",stack.push())
        }

打印结果

2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 6
2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 5
2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 4
2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 3
2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 2
2020-06-14 15:24:48.034 6075-6075/com.example.kotlindemo D/azy: 1

总结:先压栈的最后出来


I get it.jpeg

二、队列(链表实现)

队列.jpg

如上图,从队尾插入数据,从队头取数据。这样保存的数据,插入的顺序和取出来的顺序是一样的。

来个最简单的实现

**
 * 需要一个头节点来出队列
 * 需要一个尾节点来进队列
 * 需要一个队列的长度
 *
 */
class Queue  : Iterable<String>{
    class Node(var  content : String,var  next : Node?)
    private var first : Node? = null
    private var last : Node? = null
    private var N : Int = 0

    fun isEmpty() : Boolean{
        return first == null
    }

    fun getSize() : Int{
        return N;
    }

    //进栈
    fun enqueue( content : String){
        //从队尾添加元素
        var oldLast = last;
        last = Node(content,null)
        if (isEmpty()){
            first = last
        }else
        oldLast?.next = last
        N++
    }
    //出栈
   fun dequeue() : String?{
        var item = first?.content
        first = first?.next
        if (isEmpty()){
           last = null
        }
        N++
        return item
    }

   override fun iterator(): Iterator<String> {
        return ListIterator()
    }

    inner class ListIterator : Iterator<String> {
        private var current = first
        override fun hasNext(): Boolean {
            return current == null
        }


        override fun next(): String {
                var content = current?.content
                current = current?.next
                //这个迭代器不知道为什么不能使用String? 所以这里转换了一下
                return  content ?: "" 
        }
    }

}

如何使用?

 var queue = Queue()
        queue.enqueue("1")
        queue.enqueue("2")
        queue.enqueue("3")
        queue.enqueue("4")
        queue.enqueue("5")
        queue.enqueue("6")

        for (i in 0 .. queue.getSize()){
            Log.d("azy",queue.dequeue())
        }

打印结果

2020-06-21 10:47:16.356 7529-7529/com.example.kotlindemo D/azy: 1
2020-06-21 10:47:16.356 7529-7529/com.example.kotlindemo D/azy: 2
2020-06-21 10:47:16.356 7529-7529/com.example.kotlindemo D/azy: 3
2020-06-21 10:47:16.357 7529-7529/com.example.kotlindemo D/azy: 4
2020-06-21 10:47:16.357 7529-7529/com.example.kotlindemo D/azy: 5
2020-06-21 10:47:16.357 7529-7529/com.example.kotlindemo D/azy: 6

总结一下:根据堆栈和队列的打印结果,不难看出,堆栈是存入和取出的顺序是相反的,而队列存入和取出的顺序是相同的。

这是讨论啥呢.jpeg

相关文章

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/hhnxxktx.html