欧美精品在线一区二区三区_亚洲女同精品视频_日韩一区免费_国产欧美久久久精品免费_国产这里只有精品_僵尸再翻生在线观看_久久99精品国产一区二区三区_亚洲免费一区二区_女教师淫辱の教室蜜臀av软件_中文字幕国产一区二区

JavaScript版數據結構與算法——基礎篇(一)

2020-5-28    前端達人

數組

數組——最簡單的內存數據結構

數組存儲一系列同一種數據類型的值。( Javascript 中不存在這種限制)

對數據的隨機訪問,數組是更好的選擇,否則幾乎可以完全用 「鏈表」 來代替

在很多編程語言中,數組的長度是固定的,當數組被填滿時,再要加入新元素就很困難。Javascript 中數組不存在這個問題。

但是 Javascript 中的數組被實現成了對象,與其他語言相比,效率低下。

數組的一些核心方法

方法 描述
push 方法將一個或多個元素添加到數組的末尾,并返回該數組的新長度。(改變原數組)
pop 方法從數組中刪除最后一個元素,并返回該元素的值。(改變原數組)
shift 方法從數組中刪除第一個元素,并返回該元素的值,如果數組為空則返回 undefined 。(改變原數組)
unshift 將一個或多個元素添加到數組的開頭,并返回該數組的新長度(改變原數組)
concat 連接兩個或多個數組,并返回結果(返回一個新數組,不影響原有的數組。)
every 對數組中的每個元素運行給定函數,如果該函數對每個元素都返回 true,則返回 true。若為一個空數組,,始終返回 true。 (不會改變原數組,[].every(callback)始終返回 true)
some 對數組中的每個元素運行給定函數,如果任一元素返回 true,則返回 true。若為一個空數組,,始終返回 false。(不會改變原數組,)
forEach 對數組中的每個元素運行給定函數。這個方法沒有返回值,沒有辦法中止或者跳出 forEach() 循環,除了拋出一個異常(foreach不直接改變原數組,但原數組可能會被 callback 函數該改變。)
map 對數組中的每個元素運行給定函數,返回每次函數調用的結果組成的數組(map不直接改變原數組,但原數組可能會被 callback 函數該改變。)
sort 按照Unicode位點對數組排序,支持傳入指定排序方法的函數作為參數(改變原數組)
reverse 方法將數組中元素的位置顛倒,并返回該數組(改變原數組)
join 將所有的數組元素連接成一個字符串
indexOf 返回第一個與給定參數相等的數組元素的索引,沒有找到則返回 -1
lastIndexOf 返回在數組中搜索到的與給定參數相等的元素的索引里最大的值,沒有找到則返回 -1
slice 傳入索引值,將數組里對應索引范圍內的元素(淺復制原數組中的元素)作為新數組返回(原始數組不會被改變)
splice 刪除或替換現有元素或者原地添加新的元素來修改數組,并以數組形式返回被修改的內容(改變原數組)
toString 將數組作為字符串返回
valueOf 和 toString 類似,將數組作為字符串返回

是一種遵循后進先出(LIFO)原則的有序集合,新添加或待刪除的元素都保存在棧的同一端,稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。

通俗來講,就是你向一個桶里放書本或者盤子,你要想取出最下面的書或者盤子,你必須要先把上面的都先取出來。

棧也被用在編程語言的編譯器和內存中保存變量、方法調用等,也被用于瀏覽器歷史記錄 (瀏覽器的返回按鈕)。

代碼實現

// 封裝棧
    function Stack() {
        // 棧的屬性
        this.items = []

        // 棧的操作
        // 1.將元素壓入棧
        Stack.prototype.push = function (element) {
            this.items.push(element)
        }
        // 2.從棧中取出元素
        Stack.prototype.pop = function () {
            return this.items.pop()
        }
        // 3.查看棧頂元素
        Stack.prototype.peek = function () {
            return this.items[this.items.length - 1]
        }
        // 4.判斷是否為空
        Stack.prototype.isEmpty = function () {
            return this.items.length === 0
        }
        // 5.獲取棧中元素的個數
        Stack.prototype.size = function () {
            return this.items.length
        }
        // 6.toString()方法
        Stack.prototype.toString = function () {
            let str = ''
            for (let i = 0; i< this.items.length; i++) {
                str += this.items[i] + ' '
            }
            return str
        }

    }

    // 棧的使用
    let s = new Stack()

隊列

隊列是遵循先進先出(FIFO,也稱為先來先服務)原則的一組有序的項。隊列在尾部添加新
元素,并從頂部移除元素。添加的元素必須排在隊列的末尾。

生活中常見的就是排隊

代碼實現

function Queue() {
        this.items = []
        // 1.將元素加入隊列
        Queue.prototype.enqueue = function (element) {
            this.items.push(element)
        }
        // 2.從隊列前端刪除元素
        Queue.prototype.dequeue = function () {
            return this.items.shift()
        }
        // 3.查看隊列前端元素
        Queue.prototype.front = function () {
            return this.items[0]
        }
        // 4.判斷是否為空
        Queue.prototype.isEmpty = function () {
            return this.items.length === 0
        }
        // 5.獲取隊列中元素的個數
        Queue.prototype.size = function () {
            return this.items.length
        }
        // 6.toString()方法
        Queue.prototype.toString = function () {
            let str = ''
            for (let i = 0; i< this.items.length; i++) {
                str += this.items[i] + ' '
            }
            return str
        }
    }
    
    // 隊列使用
    let Q = new Queue()

優先級隊列:

代碼實現


function PriorityQueue() {
        function QueueElement(element, priority) {
            this.element = element
            this.priority = priority
        }
        this.items = []

        PriorityQueue.prototype.enqueue = function (element, priority) {
            let queueElement = new QueueElement(element,priority)

            // 判斷隊列是否為空
            if (this.isEmpty()) {
                this.items.push(queueElement)
            } else {
                let added = false // 如果在隊列已有的元素中找到滿足條件的,則設為true,否則為false,直接插入隊列尾部
                for (let i = 0; i< this.items.length; i++) {
                    // 假設priority值越小,優先級越高,排序越靠前
                    if (queueElement.priority < this.items[i].priority) {
                        this.items.splice(i, 0, queueElement)
                        added = true
                        break
                    }
                }
                if (!added) {
                    this.items.push(queueElement)
                }
            }

        }
        
    }
    

鏈表

鏈表——存儲有序的元素集合,但在內存中不是連續放置的。


鏈表(單向鏈表)中的元素由存放元素本身「data」 的節點和一個指向下一個「next」 元素的指針組成。牢記這個特點

相比數組,鏈表添加或者移除元素不需要移動其他元素,但是需要使用指針。訪問元素每次都需要從表頭開始查找。

代碼實現:
單向鏈表


function LinkedList() {
        function Node(data) {
            this.data = data
            this.next = null

        }
        this.head = null // 表頭
        this.length = 0
        // 插入鏈表
        LinkedList.prototype.append = function (data) {
            // 判斷是否是添加的第一個節點
            let newNode = new Node(data)
            if (this.length == 0) {
                this.head = newNode
            } else {
                let current = this.head
                while (current.next) { 
                // 如果next存在,
                // 則當前節點不是鏈表最后一個
                // 所以繼續向后查找
                    current = current.next
                }
                // 如果next不存在
                 // 則當前節點是鏈表最后一個
                // 所以讓next指向新節點即可
                current.next = newNode
            }
            this.length++
        }
        // toString方法
        LinkedList.prototype.toString = function () {
            let current = this.head
            let listString = ''
            while (current) {
                listString += current.data + ' '
                current = current.next
            }
            return listString
        }
         // insert 方法
        LinkedList.prototype.insert = function (position, data) {
            if (position < 0 || position > this.length) return false
            let newNode = new Node(data)
            if (position == 0) {
                newNode.next = this.head
                this.head = newNode
            } else {
                let index = 0
                let current = this.head
                let prev = null
                while (index++ < position) {
                    prev = current
                    current = current.next
                }
                newNode.next = current
                prev.next = newNode
            }
            this.length++
            return true
        }
        // get方法
        LinkedList.prototype.get = function (position) {
            if (position < 0 || position >= this.length) return null
            let index = 0
            let current = this.head
            while (index++ < position){
                current = current.next
            }
            return current.data
        }
        LinkedList.prototype.indexOf = function (data) {
            let index = 0
            let current = this.head
            while (current) {
                if (current.data == data) {
                    return index
                } else {
                    current = current.next
                    index++
                }
            }

            return  -1
        }
        LinkedList.prototype.update = function (position, data) {
            if (position < 0 || position >= this.length) return false
            let index = 0
            let current = this.head
            while (index++ < position) {
                current = current.next
            }
            current.data = data
            return  true
        }
        LinkedList.prototype.removeAt = function (position) {
            if (position < 0 || position >= this.length) return null
            if (position == 0) {
                this.head = this.head.next
            } else {
                let index = 0
                let current = this.head
                let prev = null
                while (index++ < position) {
                    prev = current
                    current = current.next
                }
                prev.next = current.next
            }
            this.length--
            return  true


        }
        LinkedList.prototype.remove = function (data) {
            let postions = this.indexOf(data)

            return this.removeAt(postions)
        }
        
    }

    let list = new LinkedList()
雙向鏈表:包含表頭表尾 和 存儲數據的 節點,其中節點包含三部分:一個鏈向下一個元素的next, 另一個鏈向前一個元素的prev 和存儲數據的 data。牢記這個特點

function doublyLinkedList() {
        this.head = null // 表頭:始終指向第一個節點,默認為 null
        this.tail = null // 表尾:始終指向最后一個節點,默認為 null
        this.length = 0 // 鏈表長度

        function Node(data) {
            this.data = data
            this.prev = null
            this.next = null
        }

        doublyLinkedList.prototype.append = function (data) {
            let newNode = new Node(data)

            if (this.length === 0) {
            // 當插入的節點為鏈表的第一個節點時
            // 表頭和表尾都指向這個節點
                this.head = newNode
                this.tail = newNode
            } else {
            // 當鏈表中已經有節點存在時
            // 注意tail指向的始終是最后一個節點
            // 注意head指向的始終是第一個節點
            // 因為是雙向鏈表,可以從頭部插入新節點,也可以從尾部插入
            // 這里以從尾部插入為例,將新節點插入到鏈表最后
            // 首先將新節點的 prev 指向上一個節點,即之前tail指向的位置
                newNode.prev = this.tail
            // 然后前一個節點的next(及之前tail指向的節點)指向新的節點
            // 此時新的節點變成了鏈表的最后一個節點
                this.tail.next = newNode
            // 因為 tail 始終指向的是最后一個節點,所以最后修改tail的指向
                this.tail = newNode
            }
            this.length++
        }
        doublyLinkedList.prototype.toString = function () {
            return this.backwardString()
        }
        doublyLinkedList.prototype.forwardString = function () {
            let current = this.tail
            let str = ''

            while (current) {
                str += current.data + ''
                current = current.prev
            }

            return str
        }
        doublyLinkedList.prototype.backwardString = function () {
            let current = this.head
            let str = ''

            while (current) {
                str += current.data + ''
                current = current.next
            }

            return str
        }

        doublyLinkedList.prototype.insert = function (position, data) {
            if (position < 0 || position > this.length) return false
            let newNode = new Node(data)
            if (this.length === 0) {
                this.head = newNode
                this.tail = newNode
            } else {
                if (position == 0) {
                    this.head.prev = newNode
                    newNode.next = this.head
                    this.head = newNode
                } else if (position == this.length) {
                    newNode.prev = this.tail
                    this.tail.next = newNode
                    this.tail = newNode
                } else {
                    let current = this.head
                    let index = 0
                    while( index++ < position){
                        current = current.next
                    }
                    newNode.next = current
                    newNode.prev = current.prev
                    current.prev.next = newNode
                    current.prev = newNode

                }

            }

            this.length++
            return true
        }
        doublyLinkedList.prototype.get = function (position) {
            if (position < 0 || position >= this.length) return null
            let current = this.head
            let index = 0
            while (index++) {
                current = current.next
            }

            return current.data
        }
        doublyLinkedList.prototype.indexOf = function (data) {
            let current = this.head
            let index = 0
            while (current) {
                if (current.data === data) {
                    return index
                }
                current = current.next
                index++
            }
            return  -1
        }
        doublyLinkedList.prototype.update = function (position, newData) {
            if (position < 0 || position >= this.length) return false
            let current = this.head
            let index = 0
            while(index++ < position){
                current = current.next
            }
            current.data = newData
            return true
        }
        doublyLinkedList.prototype.removeAt = function (position) {
            if (position < 0 || position >= this.length) return null
            let current = this.head
            if (this.length === 1) {
                this.head = null
                this.tail = null
            } else {
                if (position === 0) { // 刪除第一個節點
                    this.head.next.prev = null
                    this.head = this.head.next
                } else if (position === this.length - 1) { // 刪除最后一個節點
                    this.tail.prev.next = null
                    this.tail = this.tail.prev
                } else {
                    let index = 0
                    while (index++ < position) {
                        current = current.next
                    }
                    current.prev.next = current.next
                    current.next.prev = current.prev
                }
            }
            this.length--
            return current.data
        }
        doublyLinkedList.prototype.remove = function (data) {
            let index = this.indexOf(data)
            return this.removeAt(index)
        }
    }


感謝你的閱讀~
————————————————
版權聲明:本文為CSDN博主「重慶崽兒Brand」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/brand2014/java/article/details/106134844



日歷

鏈接

個人資料

藍藍設計的小編 http://www.ocunn.cn

存檔

一区二区成人免费视频| 一区二区在线观看视频| 日本一区二区高清| 亚洲丝袜另类动漫二区| 精品露脸国产偷人在视频| 欧美视频一区二| 精品国产亚洲在线| 精品国偷自产在线视频| 国产成人精品在线播放| 精品国产_亚洲人成在线| 99亚洲精品视频| 成人午夜激情av| 国产精品伦子伦| 免费在线观看亚洲| a天堂中文在线观看| 日本福利片在线| 福利写真视频网站在线| **精品中文字幕一区二区三区| 精品自拍偷拍| 亚洲小说欧美另类社区| 国模少妇一区二区三区| 国产精品国产三级国产aⅴ原创| 五月婷婷另类国产| 亚洲国产高清福利视频| 欧美高清激情视频| 国产成人免费观看| 国产一区二区三区乱码| 成人啪啪18免费游戏链接| h色网站在线观看| 国产伦精品一区二区三区免.费| 在线视频2区| 欧产日产国产精品视频 | 偷窥自拍亚洲色图精选| 亚洲精品偷拍| 久久综合久久综合亚洲| 在线国产亚洲欧美| 日韩一区二区欧美| 999热视频| 青青草视频在线免费播放| 艳妇乳肉亭妇荡乳av| 久久久黄色大片| 亚洲精品一区视频| 国产极品久久久久久久久波多结野 | 99精品在线免费在线观看| 国产一区二区不卡老阿姨| 一区二区三区在线观看欧美| 精品少妇一区二区三区免费观看 | 97超级碰碰| 成人午夜免费在线| 无码人妻精品一区二区中文| 亚洲最大成人av| 国产传媒在线播放| 群体交乱之放荡娇妻一区二区| 久久99伊人| 中文字幕在线一区免费| 精品国产一区二区三区不卡| 欧美在线观看日本一区| 91免费视频黄| 中文字幕5566| av在线资源观看| 嗯~啊~轻一点视频日本在线观看| 综合色就爱涩涩涩综合婷婷| 狠狠网亚洲精品| 欧美午夜激情小视频| 久久福利网址导航| 欧美最大成人综合网| 日本亚洲一区二区三区| 成人小视频在线播放| 黄色网址在线免费播放| 久操国产精品| aa级大片欧美| 日韩欧美综合在线| 国产精品尤物福利片在线观看| 国产女主播自拍| 爱爱视频免费在线观看| 天海翼一区二区三区免费| 亚洲国产天堂| 日本不卡一区二区三区| 无吗不卡中文字幕| 欧美精品18videos性欧| 最近免费观看高清韩国日本大全| 国产免费看av| 97国产在线| 亚洲不卡视频| 国产激情精品久久久第一区二区 | 亚洲人辣妹窥探嘘嘘| 伦av综合一区| av白虎一区| 在线观看视频免费一区二区三区| 亚洲人妖av一区二区| 日韩有码在线观看| 亚洲一区二区在| 婷婷丁香综合网| 美女毛片在线看| 日韩精品福利一区二区三区| 粉嫩aⅴ一区二区三区四区| 91精品国产欧美日韩| 成人国产精品日本在线| 男生操女生视频在线观看 | 中文字幕一区二区三区人妻在线视频 | 亚洲午夜在线观看| 国产真人真事毛片视频| 在线观看的av网站| 中国av一区| 国产精品久久久久影院| 久久精品99久久久香蕉| 性生活免费观看视频| 玖玖爱免费视频| 国产三线在线| 久久国产毛片| 91精品国产一区二区人妖| 999视频在线免费观看| 午夜不卡久久精品无码免费| 白虎精品一区| 国产传媒欧美日韩成人精品大片| 国产视频一区二区在线观看| 丝袜美腿精品国产二区| 丁香色欲久久久久久综合网| 亚洲国产精品成人无久久精品| 性欧美ⅴideo另类hd| 99riav国产精品| 欧美日韩国产一级二级| 99三级在线| 91激情视频在线观看| 国产精品四虎| 国产精品99一区二区| 日韩欧中文字幕| 92国产精品视频| 泷泽萝拉在线播放| 91精品国产综合久久久久久豆腐| 欧美二区不卡| 在线精品亚洲一区二区不卡| 91欧美视频网站| 男人天堂av电影| 麻豆网在线观看| 久久激情一区| 欧美精品一区男女天堂| 亚洲一区三区视频在线观看| 国产一级一片免费播放放a| 蜜桃视频www网站在线观看| 久久国产精品第一页| 亚洲国产成人精品一区二区| 在线视频精品一区| 手机av免费观看| 亚洲性视频在线| 中文字幕亚洲不卡| 国产高清在线不卡| 国产精品300页| 精品自拍一区| 另类小说一区二区三区| 日韩精品亚洲精品| 可以在线看的av网站| 国产伦理一区二区| 免费欧美激情| 欧美日韩精品中文字幕| 国产亚洲欧美一区二区三区| www欧美com| 777午夜精品电影免费看| 2020国产精品| 欧美在线观看网站| 一级特黄a大片免费| 男女在线观看视频| 国产超碰在线一区| 久久99精品久久久久久青青91| 91精品无人成人www| 香蕉av在线| 午夜在线精品偷拍| 亚洲午夜精品视频| 色国产在线视频| 视频一区二区在线播放| 免费日韩av| 亚洲午夜激情免费视频| 美女一区二区三区视频| 欧美精品少妇| 日韩电影在线观看一区| 这里只有精品丝袜| 亚洲无在线观看| 人人干在线视频| 国产裸体歌舞团一区二区| 欧美成人午夜激情视频| 国产成人精品一区二区在线小狼| 97在线观看免费观看高清| 捆绑调教美女网站视频一区| 精品国产美女在线| 在线观看一区二区三区视频| 免费av网站在线观看| 国产高清视频一区| 欧美亚洲激情在线| av最新在线观看| 99tv成人影院| 午夜精品一区在线观看| 日韩欧美第二区在线观看| 一级视频在线播放| 欧美色123| 亚洲性无码av在线| 香蕉视频在线观看黄| 国产区美女在线| 国产精品久久午夜| 国产精品一码二码三码在线| 做爰视频毛片视频| 综合久久久久| 国产一区二区欧美日韩| 中文写幕一区二区三区免费观成熟| 日本片在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 成人在线资源网址| 在线播放一级片| 韩国欧美一区| 久久天天躁狠狠躁夜夜av| 亚洲做受高潮无遮挡| 国产亚洲人成a在线v网站| 偷偷要91色婷婷| 第九区2中文字幕| 蜜桃视频在线入口www| 大胆亚洲人体视频| 亚洲精品免费网站| 在线观看免费高清视频| 亚洲国产专区| 不卡中文字幕av| 美国精品一区二区| 亚洲国产网址| 亚洲国产中文字幕在线观看| 亚洲自拍第三页| 欧美黑人巨大xxxxx| 亚洲成人免费av| av在线免费观看国产| 国产福利小视频在线观看| 91丨porny丨在线| 国产精品久久久对白| 成 人 免费 黄 色| 久久国产夜色精品鲁鲁99| 国产精品视频xxxx| 一级特黄aaaaaa大片| 日韩在线播放一区二区| 日本亚洲欧美成人| 亚洲图片欧美日韩| 亚洲激情女人| 国产成人精品一区二区三区| 天天干,天天干| 国产精品美女久久久浪潮软件| 97超碰色婷婷| 成人午夜淫片100集| 国产一区久久| 97香蕉超级碰碰久久免费软件 | 欧洲毛片在线| 国产亚洲欧洲997久久综合 | 在线观看免费视频黄| 亚洲网址在线观看| 亚洲精品白浆高清久久久久久| 日韩免费高清一区二区| 高清一区二区三区| 亚洲欧美精品suv| 一级免费黄色录像| 亚洲一区在线| 亚洲**2019国产| 五月婷婷丁香在线| 美国毛片一区二区| 波多野结衣成人在线| 亚洲欧美日韩精品永久在线| 91亚洲男人天堂| 一区二区三区不卡在线| 老司机精品视频在线观看6| 亚洲一区视频在线| 黄色成人免费看| 四虎影视成人精品国库在线观看| 日韩三级中文字幕| 97人妻人人揉人人躁人人| 日韩精品永久网址| 欧美激情一级欧美精品| 国产精品午夜一区二区| 精久久久久久久久久久| 精品一区二区三区日本| 黄色片视频在线观看| 玉米视频成人免费看| 国产精品无码一本二本三本色| av高清一区| 亚洲经典中文字幕| 人妻久久一区二区| 性伦欧美刺激片在线观看| 亚洲一区二区三| 天堂av在线播放| 一区二区三区日韩精品| 欧美成人黄色网址| 中文一区二区三区四区| 色偷偷亚洲男人天堂| 波多野结衣国产| 美腿丝袜亚洲一区| 欧美精品尤物在线| 午夜伦理在线视频| 在线电影一区二区三区| 亚洲天堂岛国片| 韩国一区二区三区在线观看| 国产日韩av在线| 色久视频在线播放| 性欧美疯狂xxxxbbbb| 五月天六月丁香| 精品久久久久久久| 日本亚洲欧美成人| av福利导福航大全在线播放| 亚洲欧洲制服丝袜| 中文字幕第一页在线视频| 中文字幕中文字幕精品| 欧美尤物巨大精品爽| 成人在线观看视频app| 亚洲国产一区二区三区青草影视 | 中文字幕乱伦视频| 欧美一区二区三区少妇| 免费成人高清在线视频| 国产精品久久久国产盗摄| 成人国产电影网| 日韩a∨精品日韩在线观看| 欧美美女被草| 久久网福利资源网站| 99热这里只有精| 亚洲三级在线播放| 国产精品91av| 亚洲视频碰碰| 欧美人与性禽动交精品| av资源中文在线| 国产午夜精品免费一区二区三区| 无码人妻精品一区二区三区9厂 | 亚洲综合久久久| 熟妇人妻久久中文字幕| 亚洲区第一页| 亚州欧美一区三区三区在线| 国产精品粉嫩| 日韩中文字幕网站| 国产 日韩 欧美 综合| 亚洲综合色成人| 一区二区不卡免费视频| 毛片一区二区| 国产又粗又大又爽的视频| 国产精品1区在线| 91精品国产91久久久久福利| 在线观看免费网站| 欧美日本高清视频在线观看| 久久久精品人妻一区二区三区四| 国产成人综合精品三级| 国产免费人做人爱午夜视频| 亚洲天堂日韩在线| 91精品黄色| 中文字幕在线直播| 久久国产精品亚洲| 色久视频在线播放| 日韩欧美一区中文| 糖心vlog精品一区二区| 自拍偷拍欧美激情| 国产人妻大战黑人20p| 久久精品国产99国产| 欧美韩国日本在线| 午夜精品毛片| 日本一区二区精品视频| 精品视频在线一区| 国产精品成熟老女人| 中文在线观看免费| 日韩在线视频免费观看高清中文| 色噜噜在线播放| 欧美午夜精品久久久久久超碰 | 亚洲天堂成人在线| 日本免费不卡视频| 欧美日韩免费观看一区二区三区| 亚洲天堂av片| 亚洲在线视频免费观看| 四虎精品免费视频| 国产欧美日韩在线| 成人h动漫精品一区| 国产一区二区在线观看视频| 蜜臀av免费观看| 国产亚洲激情| 欧美 日韩 激情| 午夜日韩激情| 国产成人生活片| 欧美电影一二区| 亚洲国产欧美一区二区三区不卡| 亚洲精品一区国产| 97se亚洲综合在线| av在线亚洲一区| 91亚洲精品在线| 欧美视频免费看| 成人a视频在线观看| 日本成人片在线| 国产精品久久一区主播| 国产免费不卡| 国产精品第一页在线| 天堂а√在线最新版中文在线| 97久久超碰福利国产精品…| 手机在线免费看av| 午夜欧美不卡精品aaaaa| 含羞草www国产在线视频| 美女啪啪无遮挡免费久久网站| 超碰免费在线观看| 久久久www成人免费精品张筱雨 | 成年人免费看毛片| 亚洲成av人在线观看| 99久久精品国产亚洲| 色婷婷亚洲一区二区三区| 在线观看xxxx| 欧美日韩国产一区| 五月天婷婷视频| 亚洲男女自偷自拍图片另类|