• 数据结构 栈 、 队列 、 链表


    栈:

      1.线性结构(有顺序)

      2.可以存储多个元素

      3.有入栈、出栈

      4.有栈顶

      5.不关注元素的下标

      6.后进先出

    属性和方法:

      1.入栈push

      2.出栈pop

      3.获取栈顶peek

      4.获取栈的长度len

      5.清空栈clear

    js模拟栈

    class Stack {
        constructor() {
            this.stack = []
        }
        push(ele) {    //返回添加的数据
            this.stack.push(ele)
            return ele
        }
        pop() {     //获取最后一条数据
            return this.stack.pop()
        }
        len() {    //获取长度
            return this.stack.length
        }
        peek() {
            // 获取栈顶 => 数组的最后一项
            return this.stack[this.len() - 1]
        }
        clear() {    // 清空栈
            this.stack.length = 0
        }
    }
    站的案例:
      十进制转二进制
      回文字符串
      括号是否匹配
      迷宫
      网站历史记录(返回上一页)
      斐波那契数列
     
    十进制转二进制例:
      
     function decToBinary(num) {
            const s = new Stack()
            while(num > 0) {
                s.push(num % 2)
                num = Math.floor(num / 2)    //从新复制继续往下转
            }
            let str = ''
            while(s.len() > 0) {
                str += s.pop()    //由于顺序颠倒需调转顺序生成正确十进制
            }
            return str
        }
        decToBinary(45)     //101101
    数组的结构(特点):
      1.是一段连续的内存
      2.存储的同类型的数据
      3.数组的长度是固定的
      4.通过下标访问
      5.搜索和查找很方便(通过下标)
      6.插入和删除很麻烦(牵一发而动全身)
    队列:
      1.线性结构
      2.先进先出(First ln First Out,FIFO)
    队列的属性和方法
      1. enquele (ele)进入队列:像队列尾部添加
      2. dequeue ()出队:移除队列的第一个元素,并返回被移除的元素。
      3. front()返回队列的第一个元素,只返回不出队
      4. isEmpty():判断队列是否为空
      5. Size():返回队列包含元素个数
    队列案例
      击鼓传花
      原规则:所有学生围成一圈,从某位同学手里开始向旁边的同学传递花,某个人在击鼓,当鼓声停下的那一刻,花落在谁手里,谁表演节目
      修改后游戏规则:所有学生围成一圈,开始数数,数到某个数字的人自动淘汰,最后剩下的这个人会获得胜利,问最后剩下的是谁?
    js模拟队列
    class Queue{
        constructor() {
            this.queue = []
        }
        enqueue(element) {   //从末尾添加数据
            this.queue.push(element)
            return element
        }
        dequeue() {   //获取第一个数据
            return this.queue.shift()
        }
        front() {  //返回第一个
            if(this.queue.length > 0) {
                return this.queue[0]
            } else {
                return undefined
            }
        }
        isEmpty() {    //检测是否有数据
            return this.queue.length > 0
        }
        size() {    //返回总长度
            return this.queue.length
        }
    }
     
        let nameList = ['刘猛', '黄乾坤', '刘昭阳', '康亚宁', '赵坚', '杨智宇', '刘晨曦', '孟令辉']
        function pass(nameList, num) {
            let que = new Queue()       //实例化
            for (let i = 0; i < nameList.length; i++) {
                que.enqueue(nameList[i])   //生成队列
            }
            while (que.size() > 1) {      //判断队列是不是剩一个不是就一直循环
                for (let i = 0; i < num; i++) {
                    que.enqueue(que.dequeue())
                    //拿出第一个放到队列后边循环完形成新队列,当i等于num时停止循环
                    // 如果长度大于一继续循环
                }
                que.dequeue()
            }
            return que.front()
        }
        console.log(pass(nameList, 4))   //刘昭阳
    链表:
      
    class Node {
        constructor(data) {
            this.data = data
            this.next = null
        }
    }
    class LinkNode{
        constructor() {
            this.head = null
            this.count = 0
        }
        push(data) {                                 //从末尾添加
            let node = new Node(data)
            if(!this.head) {
                // 头结点为空
                this.head = node
            } else {
                let current = this.head
                while(current.next) {
                    current = current.next
                }
                current.next = node
            }
            this.count++
        }
        get(index) {                                       //查找某一项
            if(index >= this.count) {
                return undefined
            } else {
                let current = this.head
                for(let i =0; i< index; i++) {
                    current = current.next
                }
                return current.data
            }
        }
        set(index, data) {                       //设置、修改某一项
            if(index >= this.count) {
                return false
            } else {
                let current = this.head
                for(let i =0; i< index; i++) {
                    current = current.next
                }
                current.data = data
                return true
            }
        }
        remove(index) {                                 //删除某一项
            if(index >= this.count) {
                return false
            } else {
                let current = this.head
                let previous = null
                for(let i =0; i< index; i++) {
                    previous = current
                    current = current.next
                }
                previous.next = current.next
                this.count--
            }
        }
        insert(index, data) {                                //从中间的摸个位置添加一项
            if(index >= this.count) {
                return false
            } else {
                let node = new Node(data)
                let current = this.head
                let previous = null
                for(let i =0; i< index; i++) {
                    previous = current
                    current=current.next
                }
                previous.next = node
                node.next=current
                this.count++
                return true
            }
        }
    }
     
    let link = new LinkNode()
        link.push(1)
        link.push(2)
        link.push(3)
        console.log(link)   
      

    查找某一项

      console.log(link.get(2))               //  3

    修改某一项的值

      link.set(2,'a') 

     
      删除某一项
        link.remove(1) 

       

       在某个位置添加一项

      link.insert(2,'b')

      

  • 相关阅读:
    网站发布小工具,--让发布变简单一点
    鼠标右键发布文件到远程服务器
    关于跑步耳机的一些思考
    对棋牌游戏平台的一些思考
    复杂业务简单化的一个小技巧
    游戏杂记
    python 杂记
    lua debug
    quick-cocos2d-x 杂记
    Linux 杂记
  • 原文地址:https://www.cnblogs.com/hqkbk/p/14152842.html
Copyright © 2020-2023  润新知