日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

八、【栈和队列】栈的应用

發布時間:2025/3/21 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八、【栈和队列】栈的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

棧的應用

棧具有先進后出的特點,這個特點在解決某些問題時是很有效的。本節我們來看幾個棧的常見應用以及棧結構適合解決的問題類型。



1 數制轉換

我們日常生活中用的是十進制,而計算機中絕大多數時候是二進制,八進制或十六進制,這就涉及到數制轉換的問題。十進制向其他進制轉換一般是通過連除實現的,例如,如果我們想找出十進制的 42 對應的二進制表示,就需要對 42 連除 2,直到商為 0 。下圖展示了完整過程:

用公式概括就變為了:
N=(Ndivd)×d+NmoddN = (N\ \mathrm{div} \ d ) \times d + N\ \mathrm{mod}\ d N=(N?div?d)×d+N?mod?d
其中,div\mathrm{div}div 為整除運算,mod\mathrm{mod}mod 為求余運算。

假設現在要編寫一個程序來將任意的十進制數轉換為八進制數。由于上述方法最先計算出的余數位于最低位,最后計算出的位于最高位,符合后入先出的思想,所以可以用棧來保存余數。

/** Function: 進制轉換函數* ----------------------------* 輸入一個十進制數,轉換為對應的八進制表示。*/ void conversion(int n){int r; // 用來保存余數LinkedStack S;InitStack(S);while (n!=0){r = n % 8; // 求余數n = n / 8; // 將n更新為商,以便后續運算Push(S, r); // 將余數入棧}Print(S); // 將棧內元素輸出 }

2 括號匹配問題

括號匹配問題是關于棧的結構考察中最常見的一類問題,也是很能體現棧的結構特點的一類問題。假設一個表達式中可以包含三種括號:小括號,中括號和大括號,我們要用程序來檢測這個表達式中每一個左括號是否都有以正確形式與之對應的右括號。例如:

// 為了表示方便,表達式中只寫出括號 {[()]} // 正確 {}[()]() // 正確 )[] // 錯誤,缺失對應的括號 [(]) // 錯誤,對應形式不正確

讓我們先以 “{ [ ( ) ] }” 為例,分析一下如何正確的檢測。

  • 首先我們會接收第一個左大括號 “{”,為了與之匹配,我們希望盡快接到一個右大括號 “}”。
  • 然后我們會接收到一個左中括號 “[”。此時,我們希望盡快接收到一個右中括號來正確匹配,否則就會出現如 “{ [ }” 的錯誤匹配。因此,我們最緊急的任務就從匹配大括號變為了匹配中括號。
  • 之后我們會接收到一個左小括號 “(”,按照上述分析,我們最緊急的任務又變成了匹配小括號。
  • 接收右小括號,完成匹配并消除小括號,開始處理中括號的匹配。
  • 接收右中括號,完成匹配并消除中括號,開始處理大括號的匹配。
  • 接收右大括號,完成匹配并消除打括號,匹配完成。
  • 通過上述分析我們發現,在解決括號匹配問題的過程中,我們提出了一系列的任務,最后被提出的任務擁有最高的優先級,即最緊急的任務,需要最早被完成。這一點也正好符合棧的特點:后入先出,因此可以用棧來幫助解決這個問題。詳細的實現步驟如下:

  • 創建一個棧用來接收待讀取的括號。
  • 逐個檢測括號,首先檢測括號表達式的第一位是否為左括號,如不是則直接返回 false;如是則壓入棧中。
  • 如果不是第一位且為左括號,壓入棧中。
  • 如果不是第一位且為右括號,將棧頂元素與該括號匹配,如能匹配則彈出棧頂元素;如不能則直接返回 false
  • 循環第3-4步直到讀取完所有的括號。
  • 檢測棧是否為空,如果為空,則代表所有的括號全部正確匹配,返回 true;否則就代表有多余的左括號,返回 false
  • 上述步驟中,左括號會被壓入棧內,但右括號一定不會被壓入棧內,只用來檢測棧頂元素是否匹配。這主要是因為在該問題中左括號和右括號有不同的作用,左括號可以被抽象地理解為待操作的數值,待解決的問題等,而右括號就是對應的操作或解決辦法。具體到這個問題,左括號就代表一個待匹配的任務,而對應的右括號就代表完成了匹配任務。嘗試將輸入數據分為待操作的數值對應的操作兩類是用棧解決很多問題時的常用思路,在下面的問題中會有更多說明。

    括號匹配問題實現代碼如下:

    /** Function: 括號匹配檢測* ----------------------------* 檢測一個表達式中的括號是否匹配正確。* 支持的括號種類有三種:{}, []和()。*/ bool bracketMatch(string str){LinkedStack S;InitStack(S);string match = "{[(}])"; // 用來記錄可能的括號輸入char bracket;// 首先檢測第一個元素是左括號還是右括號if (match.find(str[0])>2){return false;}for (int i=0;i<str.length();i++){// 開始配對if (match.find(str[i])<3){ // 如果是是左括號Push(S, str[i]); } else { // 如果是右括號GetTop(S, bracket);if (match.find(str[i])-3==match.find(bracket)){ Pop(S, bracket);} else {return false;}}}return StackEmpty(S); }

    3 行編輯程序

    行編輯程序是一種簡單的文本編輯程序,它的主要功能是:接收用戶輸入的數據并存如數據區。但是用戶在進行輸入時不能保證不出差錯,所以如果每輸入一個數據就立刻保存顯然是一種不好的做法。因此,我們希望有一段緩沖區,可以接收用戶輸入的一行數據,如果發現錯誤可以及時更改。例如,可以規定 “#” 為退格符,表示前一位數據無效;如果發現一行內有太多錯誤,可以規定 “@” 為退行符,表示當前行無效。例如,假設程序接收了這樣的兩行:

    whli##ile (s#*s)outcha@putchar(*s=#++);

    實際有效的是下列兩行:

    while (*s)putchar(*s++);

    這種編輯程序的特點就是無法使用光標選擇想要修改的位置,當前操作只能修改最新輸入的字符,正好符合棧只能在棧頂修改元素的特性。在這一個問題中,我們將所有的輸入數據分為兩類,字符和操作符。我們只定義了兩個操作符對字符進行操作,且都是對位于操作符之前的字符進行操作,所以結合棧的結構還是很好理解的。具體實現時,可以逐個檢測輸入的字符,如果是字符則存入棧內,如果是符號則彈出棧頂或是棧內全部元素。



    4 綜合計算器

    下面來想一個稍復雜一點的問題,如何用棧實現一個簡單的綜合計算器。這個綜合計算器有加減乘除四種操作,出于簡單考慮,操作數僅限于整數。我們想輸入一個表達式,然后讓綜合計算器來計算這個表達式,例如:計算 3+6*2-2。

    第一眼看上去這個問題和行編輯程序問題很類似,輸入數據都可以分為兩類:操作數和操作符。但也有兩點區別:一,計算器的操作符通常是二元的,即操作符左右兩邊的數都是它的操作數;二,計算器的操作符有不同的優先級,如乘除的優先級高于加減。

    結合之前的想法,我們將輸入數據分為操作數和操作符,依次讀取表達式的元素,如果為數值就壓入棧中;如果為操作符就開始對棧頂元素進行計算。那么首先將 3 入棧,然后檢測到加法操作符,將 3 出棧并讀取下一位數據 6,計算他們的和。但這時就會發現一個問題,原式中 6 應該屬于優先級更高的乘法操作符的操作數,直接將它給予加法操作符會導致計算順序產生錯誤。因此,我們還需要一些額外的信息來保存操作符的優先級,優先級最高的操作符應該是最早被執行的。而我們之前提到,棧的元素順序就可以表示優先級,越靠近棧頂優先級越高。因此可以用棧來保存操作符,只需要將優先級最高的操作符放在棧頂即可。

    那么,該問題的解決思路就是:

  • 創建兩個棧分別記錄數字和符號。
  • 遍歷表達式,如果為數字,則直接入數字棧。
  • 如果為符號,檢測符號棧是否為空,如果為空,直接入棧。
  • 如果不為空,
    4.1. 待入棧符號的優先級高于或等于棧中符號的優先級,則直接入棧。
    4.2.若待入棧符號的優先級小于棧中符號的優先級,則將數字棧前兩位出棧,將當前符號棧中第一位出棧,運算后得到數字加入數字棧中,再加入符號。
  • 重復第 2-4 步直到遍歷完成。
  • 若棧為空則直接返回;若棧不為空則將數字棧前兩位出棧,符號棧第一位出棧,運算后得到數字加入數字棧中。
  • 重復第 6 步直到數字棧中只有一位數字
  • 注意: 上述第 4 步需要判斷符號的優先級,雖然經常說加減屬于同一優先級,但是加法滿足交換律和結合律,而減法不滿足,所以此處減法的優先級應當高于加法。例如:我們想計算 3-12+1 = -8,如果將加法和減法視為同樣優先級的操作,按照上面的操作可得下圖,那么最終計算出來的結果會是 3-(12+1) = -10,這顯示是錯誤的。乘除同理。
    以下只有部分代碼,完整代碼見附錄。

    /* Global variable */ stack<int> SN; // 數字棧 stack<int> SO; // 符號棧,用數字-4,-3,-2,-1來表示加,減,乘,除 string op = "+-*/"; // 記錄四種操作符/** Function: 判斷數字函數* Usage: bool b = isNumber(c);* ----------------------------* 判斷輸入的字符是否屬于數字,* 如是則返回true;否則返回false。*/ bool isNumber(char c);/** Function: 讀取函數* Usage: int read = readStr(str, i)* ---------------------------------* 用來讀取表達式位置i之后的數字或符號。* 如果讀取的是數字,則直接返回數字。* 如果讀取的是符號,將加減乘除分別以整數-4,-3,-2,-1返回。*/ int readStr(string str, int &i);/** Function: 計算函數* Usage: int res = caculate(num1, num2, op);* ------------------------------------------* 用來計算運算結果并返回。*/ int caculate(int num1, int num2, int op);/** Function: 綜合計算器* ----------------------------* 可以處理加減乘除在整數范圍內的運算。* 不包括括號。*/ int counter(string str){int i = 0; // 用來遍歷表達式字符串int read = 0; // 用來保存讀取到的值int res = 0; // 用來保存計算的結果int num1, num2; // 用來保存從數字棧中彈出的值int op; // 保存從符號棧中彈出的符號// 遍歷字符串 while (i<str.length()){read = readStr(str, i);if (read>=0){ // 如果讀取的是數字SN.push(read); // 將數字壓入棧中 } else { // 如果讀取的是符號if (SO.empty() || SO.top()<read){ // 如果符號棧為空或待入棧符號的SO.push(read); // 優先級更高,直接壓入 } else { // 否則,先運算再壓入while (!SO.empty() && read< SO.top()){num2 = SN.top(); SN.pop();num1 = SN.top(); SN.pop();op = SO.top(); SO.pop();res = caculate(num1, num2, op);SN.push(res); // 將新計算出來的值壓入棧中}SO.push(read);}}}// 清空棧while (!SO.empty()){num2 = SN.top(); SN.pop();num1 = SN.top(); SN.pop();op = SO.top(); SO.pop();res = caculate(num1, num2, op);SN.push(res); // 將新計算出來的值壓入棧中}return SN.top(); }

    注意: 上述代碼在只涉及整數(要求操作數必須是整數,操作的結果也必須是整數)時,可正常實現表達式的求值。但是在操作數為整數,操作結果不為整數時會和實際值有一些不同,這主要是因為C++的 “/” 符號代表的是求整數商。例如:計算 1+2*3/4 時,程序會先計算 3/4,整數商為 0,整個表達式結果為 1,不符合實際。 只要將操作數類型從整數類型擴展為浮點數類型就可解決這個問題。



    5 后綴表達式 Reverse Polish

    通過綜合計算器的實現,我們可以發現,對于計算機來說,即使是一個很簡單的表達式也需要很繁瑣的步驟來計算它。不過這主要是因為我們沒有把表達式翻譯為計算機可以理解的格式,在計算時需要用很多判斷語句來幫助其理解正確的運算順序。現在我們來介紹一種計算機更容易看懂的表達式——后綴表達式。

    數學表達式可分為三種:前綴、中綴和后綴。我們一般使用的都是中綴表達式,即運算符在數字之間,這種表示方式人類很容易理解,但不利于計算機做運算。因此產生了前綴表達式(波蘭式)和后綴表達式(逆波蘭式),前和后分別表示二元運算符位于運算對象之前和之后,這兩種表達式僅依靠入棧,出棧兩種操作就可以完成中綴表達式的全部運算。

    假如我們有表達式 (3+4)*5-6 ,那么其中綴、前綴及后綴表達式分別為:

    • 中綴表達式: (3+4)*5-6
    • 前綴表達式:- * + 3 4 5 6
    • 后綴表達式:3 4 + 5 * 6 -

    可以觀察到前綴和后綴表達式都不含括號,這是因為他們經過格式轉換后,符號的順序就代表了計算的順序,因此不再需要括號。我們上面實現的簡易綜合計算器就是一種中綴計算器,它其實更適合用樹來實現,而前綴和后綴計算器更適合用棧實現。


    5.1 后綴表達式

    又稱為逆波蘭式,比前綴表達式更加常用,二元運算符總是置于與之相關的兩個運算對象之后。例如,3 4 + 5 * 6 -,加號位于它的兩個運算對象之后,第一個數 3 是加號的左操作數,第二個數 4 是加號的右操作數。

    給定一個后綴表達式,它的運算規則如下:

    運算規則

  • 創建一個棧,用來保存數字
  • 從左至右掃描后綴表達式,將數字依次存入數字棧
  • 遇到運算符時,彈出棧頂的兩個數
  • 計算結果,壓入數字棧中
  • 重復上述步驟直到掃描到表達式的最右邊
  • 上述過程簡潔易懂,可以看出后綴表達式在計算上的優勢。這也表示如果有已經“翻譯”好的表達式,計算機是可以進行快速又簡潔的運算的。因此,我們再來看一下如何將中綴表達式轉換為后綴表達式。

    轉換規則

  • 創建兩個棧,分別保存數字和運算符
  • 從左到右遍歷中綴表達式,如果是數字,就直接壓入數字棧中
  • 如果是 “(”,就直接壓入符號棧
  • 如果是 “)”,就從符號棧中彈出棧頂符號,壓入數字棧中,重復該步驟直到將 “(” 彈出
  • 如果是非括號符號+ - * /,則:
  • 如果符號棧為空,直接壓入符號棧
  • 如果符號棧不為空且棧頂為 “(”,直接壓入符號棧
  • 如果符號棧不為空且棧頂為非括號運算符,判斷符號優先級。如果當前符號優先級高于或等于棧頂符號優先級,則直接壓入符號棧
  • 如果當前符號優先級低于棧頂符號優先級,則需要從符號棧中彈出棧頂符號并壓入數字棧中,重復該步驟直到當前符號優先級高于或等于棧頂符號優先級
  • 重復第 2-5 步直到遍歷整個中綴表達式
  • 將符號棧元素出棧,壓入數字棧中
  • 最終數字棧中從棧底往棧頂方向就是完整的后綴表達式
  • 注意:上述方法的轉換結果有些問題,不符合從左向右的運算規則。 例如計算 “A+B*(C-D)-E/F” , 用上述方法得到的后綴表達式為 “ABCD-*EF/-+”,按規則計算該后綴表達式,得如下步驟:

  • (C-D)
  • B*(C-D)
  • E/F
  • B*(C-D)-E/F
  • A+B*(C-D)-E/F
  • 其中前三步都沒有問題,但是到了第四步我們已經分別計算出了該表達式的三個部分:A、B*(C-D) 和 E/F,接下來按照從左向右的順序計算即可。但是按照上述規則,我們先計算了減法部分,后計算的加法部分。這樣做對答案不會產生影響,但是違反了從左向右計算的運算規則,所以得到的其實是錯誤的后綴表達式。(以后修改代碼)

    部分實現代碼如下,完整代碼見附錄:

    /* Global variable */ LinkedStack SN; // 數字棧 LinkedStack SO; // 符號棧 string op = "(+-*/)"; // 用來匹配符號,符號的位序越小代表其優先級越低/** Function: 判斷數字函數* Usage: bool b = isNumber(c);* ----------------------------* 判斷輸入的字符是否屬于數字,* 如是則返回true;否則返回false。*/ bool isNumber(char c);/** Function: 讀取函數* Usage: int read = readStr(str, i);* ---------------------------------* 用來讀取表達式位置i之后的數字或符號。* 如果讀取的是數字,則直接返回數字。* 如果讀取的是符號,將(,+,-,*,/,)分別以* 整數-6,-5,-4,-3,-2,-1返回。*/ int readStr(string str, int &i);void print();/** Function: 轉換函數* Usage: conversion(string str);* ------------------------------* 輸入一個中綴表達式,將其轉換為后綴表達式,* 存入SO中并輸出后綴表達式。*/ void conversion(string str){int i=0; // 用來遍歷中綴表達式int read=0; // 用來保存讀取到的值int res=0; // 遍歷表達式while (i<str.length()){read = readStr(str, i);if (read>=0){ // 如果讀取的是數字Push(SN, read); // 將數字壓入數字棧中 } else { // 如果讀取的是符號if (read==-6){ // 1.如果是左括號,則直接壓入符號棧Push(SO, read);}else if (read==-1){ // 2.如果是右括號,則將棧頂符號彈出并while (GetTop(SO)!=-6){ // 壓入數字棧,直到遇見左括號 Push(SN, Pop(SO));}Pop(SO); // 將左括號彈出 } else if (StackEmpty(SO) || GetTop(SO)<read){// 3.如果符號棧為空或待入棧符號的Push(SO, read); // 優先級更高,直接壓入符號棧}else { // 4.如果符號棧非空且棧頂元素優先級更高,while (!StackEmpty(SO) && read< GetTop(SO)){ // 則將棧頂符號彈出并壓入數字棧,Push(SN, Pop(SO)); // 直到棧頂元素優先級低于待入棧符號 }Push(SO, read); // 將待入棧符號壓入符號棧} }}// 將符號棧清空while (!StackEmpty(SO)){Push(SN, Pop(SO));}// 將數字棧中的元素倒序,存入符號棧中while (!StackEmpty(SN)){Push(SO, Pop(SN));}// 輸出print(); }

    5.2 前綴表達式

    又稱為波蘭式,前綴表達式和后綴表達式的作用一樣,都是為了方便計算機計算。表達式 (3+4)*5-6 的前綴表達式為 - * + 3 4 5 6。前綴表達式的運算規則和后綴表達式很類似,唯一的區別就是遍歷方向不同。

    運算規則

  • 從右至左掃描前綴表達式,將數字依次存入數字棧
  • 遇到運算符時,彈出棧頂的兩個數
  • 計算結果,壓入數字棧中
  • 重復上述步驟直到掃描到表達式的最左邊

  • 轉換規則

    轉換規則和后綴表達式類似,只是要注意從右到左掃描中綴表達式,且左右括號的優先級互換,剩下的操作和后綴表達式一致。詳情見后綴表達式 。



    相關章節

    第一節 【緒論】數據結構的基本概念
    第二節 【緒論】算法和算法評價
    第三節 【線性表】線性表概述
    第四節 【線性表】線性表的順序表示和實現
    第五節 【線性表】線性表的鏈式表示和實現
    第六節 【線性表】雙向鏈表、循環鏈表和靜態鏈表
    第七節 【棧和隊列】棧
    第八節 【棧和隊列】棧的應用
    第九節 【棧和隊列】棧和遞歸
    第十節 【棧和隊列】隊列



    附錄

    綜合計算器的實現

    /** Filename: Counter.cpp* -----------------------* 用棧實現綜合計算器。*/#include <iostream> #include <string> #include <stack> using namespace std;/* Prototype */ bool isNumber(char c); int readStr(string str, int &i); int caculate(int num1, int num2, int op); int counter(string str);/* Global variable */ stack<int> SN; // 數字棧 stack<int> SO; // 符號棧,用數字-4,-3,-2,-1來表示加,減,乘,除 string op = "+-*/"; // 記錄四種操作符/* Main program */ int main(){string str = "4/2-6/2+1*3";int res = counter(str);printf("The result is %d.\n", res);return 0; }/** Function: 判斷數字函數* Usage: bool b = isNumber(c);* ----------------------------* 判斷輸入的字符是否屬于數字,* 如是則返回true;否則返回false。*/ bool isNumber(char c){return (48<=c && c<=57); }/** Function: 讀取函數* Usage: int read = readStr(str, i);* ---------------------------------* 用來讀取表達式位置i之后的數字或符號。* 如果讀取的是數字,則直接返回數字。* 如果讀取的是符號,將加減乘除分別以整數-4,-3,-2,-1返回。*/ int readStr(string str, int &i){string num; // 用來讀取數字int n = 0; // 用來記錄多位數在字符串中的下標if (isNumber(str[i])){ // 如果讀取到的是數字while (i+n<str.length() && isNumber(str[i+n])){num[n] = str[i+n]; // 將讀取到的連續數字存入num中n++;}i = i+n; // 更新i的值return stoi(num);} return op.find(str[i++])-4; // 如果讀取到的是操作符,則直接轉換為數字返回 }/** Function: 計算函數* Usage: int res = caculate(num1, num2, op);* ------------------------------------------* 用來計算每一步計算的結果并返回。*/ int caculate(int num1, int num2, int op){int res=0;switch(op){case -4: // 加法res = num1+num2;break;case -3: // 減法res = num1-num2;break;case -2: // 乘法res = num1*num2;break;case -1: // 除法res = num1/num2;break;}return res; }/** Function: 綜合計算器* ----------------------------* 可以處理加減乘除在整數范圍內的運算。* 不包括括號。*/ int counter(string str){int i = 0; // 用來遍歷表達式字符串int read = 0; // 用來保存讀取到的值int res = 0; // 用來保存計算的結果int num1, num2; // 用來保存從數字棧中彈出的值int op; // 保存從符號棧中彈出的符號// 遍歷字符串 while (i<str.length()){read = readStr(str, i);if (read>=0){ // 如果讀取的是數字SN.push(read); // 將數字壓入棧中 } else { // 如果讀取的是符號if (SO.empty() || SO.top()<read){ // 如果符號棧為空或待入棧符號的SO.push(read); // 優先級更高,直接壓入 } else { // 否則,先運算再壓入while (!SO.empty() && read< SO.top()){num2 = SN.top(); SN.pop();num1 = SN.top(); SN.pop();op = SO.top(); SO.pop();res = caculate(num1, num2, op);SN.push(res); // 將新計算出來的值壓入棧中}SO.push(read);}}}// 清空棧while (!SO.empty()){num2 = SN.top(); SN.pop();num1 = SN.top(); SN.pop();op = SO.top(); SO.pop();res = caculate(num1, num2, op);SN.push(res); // 將新計算出來的值壓入棧中}return SN.top(); }

    后綴表達式

    鏈棧定義及實現

    /** Filename: LinkedStack.h* -----------------------* 使用單鏈表來實現鏈棧*/#ifndef _SINGLE_LINKED_LIST_h_ #define _SINGLE_LINKED_LIST_h_#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std;/********** 鏈棧的結點的類型定義 **********/ typedef int ElemType; // typedef char ElemType; typedef struct LNode{ElemType data; // 數據域struct LNode *next; // 指針域 } LNode, *LinkedStack;/********** 主要操作的實現 **********/ /** Function: 初始化操作* ----------------------------* 初始化一個空棧*/ void InitStack(LinkedStack &S){S = new LNode;S->next = NULL; }/** Function: 判空操作* ----------------------------* 判斷棧S是否為空,若為空則返回true,否則返回false。*/ bool StackEmpty(LinkedStack S){return !S->next; }/** Function: 讀取棧頂元素操作* ----------------------------* 返回棧頂元素。*/ ElemType GetTop(LinkedStack S){return S->next->data; }/** Function: 入棧操作* ----------------------------* 使用頭插法將e插入,使之成為新棧頂。*/ void Push(LinkedStack &S, ElemType e){LNode *n = new LNode;n->data = e;n->next = S->next;S->next = n; }/** Function: 出棧操作* ----------------------------* 彈出棧頂元素并返回。*/ ElemType Pop(LinkedStack &S){LinkedStack q;ElemType e;q = S->next;e = q->data;S->next = q->next;delete q;return e; }/** Function: 輸出操作* ----------------------------* 由于單鏈表的特性,更方便按從棧尾到棧頭的順序輸出。* 后續可以用遞歸法來正向輸出。*/ void Print(LinkedStack S){LinkedStack tmp=S;while (tmp->next!=NULL){tmp = tmp->next;// printf("%d <- ", tmp->data);printf("%d ", tmp->data);}// printf("base\n");printf("\n"); }#endif // _SINGLE_LINKED_LIST_h_

    后綴表達式轉換及運算的實現

    /** Filename: ReversePolish.cpp* -----------------------* 用棧實現中綴表達式向后綴表達式轉換* 以及計算后綴表達式的程序。*/#include <iostream> #include <string> #include "../LinkedStack/LinkedStack.h" using namespace std;/* Global variable */ LinkedStack SN; // 數字棧 LinkedStack SO; // 符號棧 string op = "(+-*/)"; // 用來匹配符號,符號的位序越小代表其優先級越低/* Prototype */ bool isNumber(char c); int readStr(string str, int &i); void print(); void conversion(string str); int caculate(int num1, int num2, int op); int calculateReverse();/* Main program */ int main(){InitStack(SN);InitStack(SO);int res=0;string str = "1+2/2*(8-4)"; // "(3+4)*5-6"printf("Reverse polish is: ");conversion(str);res = calculateReverse();printf("The result is: %d\n", res);return 0; }/** Function: 判斷數字函數* Usage: bool b = isNumber(c);* ----------------------------* 判斷輸入的字符是否屬于數字,* 如是則返回true;否則返回false。*/ bool isNumber(char c){return (48<=c && c<=57); }/** Function: 讀取函數* Usage: int read = readStr(str, i);* ---------------------------------* 用來讀取表達式位置i之后的數字或符號。* 如果讀取的是數字,則直接返回數字。* 如果讀取的是符號,將(,+,-,*,/,)分別以* 整數-6,-5,-4,-3,-2,-1返回。*/ int readStr(string str, int &i){string num; // 用來讀取數字int n = 0; // 用來記錄多位數在字符串中的下標if (isNumber(str[i])){ // 如果讀取到的是數字while (i+n<str.length() && isNumber(str[i+n])){num[n] = str[i+n]; // 將讀取到的連續數字存入num中n++;}i = i+n; // 更新i的值return stoi(num);} return op.find(str[i++])-6; // 如果讀取到的是操作符,則直接轉換為數字返回 }void print(){LinkedStack tmp=SO;while (tmp->next!=NULL){tmp = tmp->next;if (tmp->data>=0){printf("%d ", tmp->data);} else {switch(tmp->data){case -5:printf("+ ");break;case -4:printf("- ");break;case -3:printf("* ");break;case -2:printf("/ ");break;}} }printf("\n"); }/** Function: 轉換函數* Usage: conversion(string str);* ------------------------------* 輸入一個中綴表達式,將其轉換為后綴表達式,* 存入SO中并輸出后綴表達式。*/ void conversion(string str){int i=0; // 用來遍歷中綴表達式int read=0; // 用來保存讀取到的值int res=0; // 遍歷表達式while (i<str.length()){read = readStr(str, i);if (read>=0){ // 如果讀取的是數字Push(SN, read); // 將數字壓入數字棧中 } else { // 如果讀取的是符號if (read==-6){ // 1.如果是左括號,則直接壓入符號棧Push(SO, read);}else if (read==-1){ // 2.如果是右括號,則將棧頂符號彈出并while (GetTop(SO)!=-6){ // 壓入數字棧,直到遇見左括號 Push(SN, Pop(SO));}Pop(SO); // 將左括號彈出 } else if (StackEmpty(SO) || GetTop(SO)<read){// 3.如果符號棧為空或待入棧符號的Push(SO, read); // 優先級更高,直接壓入符號棧}else { // 4.如果符號棧非空且棧頂元素優先級更高,while (!StackEmpty(SO) && read< GetTop(SO)){ // 則將棧頂符號彈出并壓入數字棧,Push(SN, Pop(SO)); // 直到棧頂元素優先級低于待入棧符號 }Push(SO, read); // 將待入棧符號壓入符號棧} }}// 將符號棧清空while (!StackEmpty(SO)){Push(SN, Pop(SO));}// 將數字棧中的元素倒序,存入符號棧中while (!StackEmpty(SN)){Push(SO, Pop(SN));}// 輸出print(); }/** Function: 計算函數* Usage: int res = caculate(num1, num2, op);* ------------------------------------------* 用來計算運算結果并返回。*/ int caculate(int num1, int num2, int op){int res;switch(op){case -5: // 加法res = num1+num2;break;case -4: // 減法res = num1-num2;break;case -3: // 乘法res = num1*num2;break;case -2: // 除法res = num1/num2;break;}return res; }/** Function: 計算后綴表達式函數* Usage: int res = calculateReverse(LinkedStack S);* -------------------------------------------------* 后綴表達式保存在棧S中,輸入棧S,返回該表達式的值。*/ int calculateReverse(){int num1, num2, res=0;// 遍歷后綴表達式while (!StackEmpty(SO)){if (GetTop(SO)>=0){Push(SN, Pop(SO));} else {num2 = Pop(SN);num1 = Pop(SN);res = caculate(num1, num2, Pop(SO));Push(SN, res);}} return GetTop(SN); }

    總結

    以上是生活随笔為你收集整理的八、【栈和队列】栈的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    91精品毛片| 91精品国产91热久久久做人人 | 99精品视频一区二区 | 欧亚日韩精品一区二区在线 | 丁香五月亚洲综合在线 | 黄网站免费大全入口 | 久久成熟 | www.日本色 | 热久久免费视频精品 | 久久久国产精品一区二区三区 | 久久久久观看 | 中文字幕在线观看网站 | 91网站免费观看 | 亚洲无吗视频在线 | 日本3级在线观看 | 国产成人精品网站 | bayu135国产精品视频 | 91av小视频| 色偷偷人人澡久久超碰69 | 免费福利在线观看 | av网站免费在线 | 国内精品久久久久久 | 91中文字幕在线视频 | 亚洲婷婷免费 | 91麻豆免费看 | 黄色网在线免费观看 | 国产一区免费观看 | 96在线| 91香蕉视频好色先生 | 亚洲资源在线观看 | 亚洲涩涩涩 | 欧美一级专区免费大片 | 天天爱综合 | 国产精品久久久久影院 | 日日插日日干 | 国产精品区一区 | 日本在线视频网址 | 国产老熟| 欧美精品一区二区性色 | 日韩在线色 | 免费在线国产精品 | 六月天综合网 | 免费观看www7722午夜电影 | 国产精品xxxx18a99 | 成片免费观看视频999 | 五月激情五月激情 | 亚洲精品乱码久久久久久蜜桃欧美 | 最近久乱中文字幕 | 久草在线国产 | 亚洲国产成人精品久久 | 狠狠色丁香久久婷婷综合丁香 | 日韩成人在线免费观看 | 久久精品美女 | 成人在线观看影院 | 久久短视频 | 五月香视频在线观看 | 超碰人人超 | 国产精品免费看久久久8精臀av | 91探花在线| 久久五月婷婷丁香 | 91成人短视频在线观看 | 在线色吧 | 国产精品欧美精品 | 97碰碰视频 | 可以免费观看的av片 | 麻豆视频www | www.久久99 | 日韩免费看的电影 | 久久久久久久久影院 | 欧产日产国产69 | 97视频在线看 | 国产手机视频在线观看 | 国产亚洲精品女人久久久久久 | 在线成人免费av | 9999激情| 久久久久久久久久久高潮一区二区 | 欧美在线视频日韩 | av噜噜噜在线播放 | 狠狠亚洲| 成人黄色电影视频 | 狠狠色伊人亚洲综合成人 | 日韩理论在线播放 | 免费三级影片 | 黄色电影网站在线观看 | 久久精品一区二区三区国产主播 | av久久久 | 欧美91精品久久久久国产性生爱 | adc在线观看 | 亚洲不卡av一区二区三区 | 久久免费看 | 日韩久久久久久久久久 | 91九色精品女同系列 | 中文av一区二区 | 成年人在线免费看片 | 狠狠色噜噜狠狠狠狠 | 精品亚洲午夜久久久久91 | 久久久久免费精品视频 | 国产成人精品三级 | 久久久国产精品一区二区三区 | 久久久激情视频 | 成人黄色大片在线观看 | 久久精品一 | 日韩一区二区免费播放 | 99久久婷婷国产精品综合 | 欧美国产日韩激情 | 黄色一级动作片 | 亚洲精品资源在线观看 | 日本黄色黄网站 | 国产露脸91国语对白 | 永久免费看av| 国产精品成人自产拍在线观看 | 欧美激情视频一区二区三区 | 欧美韩国日本在线 | 国产资源中文字幕 | 婷婷精品国产一区二区三区日韩 | 日韩电影一区二区在线观看 | 国产在线欧美 | 国产精品网在线观看 | 色婷婷狠狠五月综合天色拍 | 91日本在线播放 | 久一网站| 日韩精品1区2区 | 日韩区欧美久久久无人区 | 久久96国产精品久久99软件 | 亚洲最大成人免费网站 | 日韩黄色影院 | www久久久| 国产精品99免费看 | 揉bbb玩bbb少妇bbb | 国产精品一区二区在线观看 | 99国产在线视频 | 黄色在线免费观看网址 | 国产成人久久精品77777 | 99精品视频网站 | 精品一区二区在线观看 | 一区二区三区在线免费观看视频 | av中文字幕日韩 | 波多野结衣在线视频一区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久综合狠狠综合 | 亚洲精品成人在线 | 日韩在线高清免费视频 | 操少妇视频| 在线电影日韩 | 人人爽久久涩噜噜噜网站 | 成人黄色小说视频 | 中文字幕丝袜美腿 | 亚洲精品在线观看中文字幕 | 黄色免费网战 | 99久久精品国产亚洲 | 亚洲黄网站 | 免费视频在线观看网站 | 色综合天 | 日本中文字幕在线观看 | 成人免费视频免费观看 | 91视频在线观看免费 | 999视频网站 | 欧美精品免费在线观看 | 中文字幕制服丝袜av久久 | 欧美性生交大片免网 | 国产午夜激情视频 | 国色天香永久免费 | 久草免费在线观看视频 | 97超级碰 | 免费看国产精品 | 91九色最新 | 999超碰 | 91免费观看网站 | 91精品国产一区二区在线观看 | 国产精品久久久免费 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产中文a | 最近中文字幕免费视频 | 亚洲视频1区2区 | 伊人五月天 | 国产精品第一页在线观看 | 黄网站色欧美视频 | 香蕉久久久久久久 | 91九色蝌蚪国产 | 国产综合婷婷 | 国产精品久久久一区二区 | 激情丁香 | 精品亚洲欧美一区 | 亚洲国产wwwccc36天堂 | 又黄又爽又色无遮挡免费 | 97人人模人人爽人人喊网 | 国产玖玖在线 | 日韩 国产| 91九色在线| 亚洲精品av中文字幕在线在线 | 91久久久久久久一区二区 | 久久色网站 | 国产小视频在线免费观看视频 | 狠狠网亚洲精品 | 在线观看岛国 | 中文字幕精品一区二区精品 | 国产精品久久久久久久久久久久久 | 久久国产精品久久久 | 久久综合综合久久综合 | 欧美激情精品久久 | 手机av电影在线观看 | 一区二区三区在线免费观看视频 | 国产精品网红福利 | 四虎亚洲精品 | 99国产精品一区 | 色吧av色av| 成人免费在线观看入口 | 视频二区在线 | 国产精品va在线播放 | 天无日天天操天天干 | 午夜久久美女 | 国产毛片久久 | 蜜桃视频日本 | 国产精品免费久久久久影院仙踪林 | 久久精品国产成人 | 免费av观看网站 | 五月天天在线 | 免费看一级黄色大全 | 最新精品视频在线 | 成年人在线免费看片 | 欧美作爱视频 | 中文字幕在线看视频 | 欧美精品一区二区免费 | 91视频88av| 免费在线h| 亚洲第一av在线播放 | 久久这里有 | 国产精品a久久久久 | 欧美福利久久 | 国产一区二区高清不卡 | 婷婷亚洲激情 | 中文字幕人成人 | 国产.精品.日韩.另类.中文.在线.播放 | 亚洲极色| 91看片在线| 99久久99久久精品 | 最新av免费在线 | www国产一区 | 久久无码av一区二区三区电影网 | av在线播放国产 | 91精品在线免费观看视频 | 色视频在线免费观看 | 麻豆久久 | 在线免费观看涩涩 | 91.dizhi永久地址最新 | 精品99999| 午夜视频在线网站 | 亚洲最新av网站 | 久草电影在线 | 日韩 在线观看 | 亚洲精品综合一二三区在线观看 | 特级毛片爽www免费版 | av黄色av| 国产精品一区二区吃奶在线观看 | 亚洲va欧洲va国产va不卡 | 韩国一区二区三区视频 | 免费av网址在线观看 | 中文字幕国产视频 | 国产精品刺激对白麻豆99 | 综合在线观看色 | 国产麻豆精品一区二区 | 成 人 黄 色 片 在线播放 | 久久国产精品免费视频 | 人人爽人人爽人人片 | 亚洲免费观看视频 | 91av电影在线观看 | 色综合久久天天 | 国产在线精品区 | 三级小视频在线观看 | 四虎影视成人精品国库在线观看 | 亚洲视频综合在线 | 欧美色一色| 在线观av | av片一区 | 欧美视频不卡 | 四虎永久网站 | 在线免费观看国产视频 | 中文字幕日韩国产 | 国产拍在线| 开心色插 | 婷婷视频| 伊人色**天天综合婷婷 | 久久伊人国产精品 | 少妇精品久久久一区二区免费 | 亚洲精品免费在线视频 | 毛片无卡免费无播放器 | 韩国av三级 | 精品久久免费看 | www久久com| 99久久婷婷国产 | 国产一区二区精品91 | 日韩午夜一级片 | 99久久99久国产黄毛片 | 日韩v欧美v日本v亚洲v国产v | www黄色| 久久亚洲福利 | 国产不卡在线观看 | 亚洲成人黄色网址 | 中文字幕韩在线第一页 | 中文字幕av一区二区三区四区 | 亚洲人成网站精品片在线观看 | 黄色免费高清视频 | 日韩成人欧美 | 国产区免费在线 | 亚洲国产三级在线 | 日韩在线观看高清 | 久热电影| 国产精品久99| 国产激情小视频在线观看 | 国产精品久久久久久久久搜平片 | 久久一及片| 日韩一区二区三区高清在线观看 | 免费的成人av | 色婷婷久久久综合中文字幕 | 黄色视屏免费在线观看 | 国产福利91精品一区二区三区 | 又色又爽又激情的59视频 | 五月婷婷丁香六月 | 91视频下载 | 国产成人免费在线 | 久久一区91 | 97国产大学生情侣白嫩酒店 | 成年人免费电影在线观看 | 久久精品日本啪啪涩涩 | 91高清视频 | 我爱av激情网 | 成全免费观看视频 | 三上悠亚在线免费 | 免费三级a | 久久99久久99精品免视看婷婷 | 国产成人免费在线 | 国内精品久久影院 | 色欧美综合 | 日韩三级av | 精品久久一区二区三区 | 在线有码中文字幕 | 国精产品一二三线999 | 精品国产一区二区三区久久久久久 | 久久成人麻豆午夜电影 | 国产精品国产自产拍高清av | 亚洲国产精品一区二区久久hs | 精品电影一区 | 91福利视频一区 | 四虎免费av | 爱爱一区| 日韩电影久久 | 国产精品一区二区白浆 | 日韩精品不卡在线 | 在线观看中文字幕一区二区 | 激情欧美一区二区免费视频 | 欧美性黄网官网 | 97免费在线观看视频 | 亚洲精品在线观看网站 | 九月婷婷人人澡人人添人人爽 | 国产久视频| 久久久精品小视频 | 日韩天天操 | 免费91在线观看 | 国产青草视频在线观看 | 国产精品破处视频 | 国产精品永久在线观看 | 久久久999精品视频 国产美女免费观看 | 天堂av在线网站 | 日韩在线视频在线观看 | 超碰国产人人 | 亚洲天堂社区 | 亚洲精品国产精品国自产 | av中文字幕电影 | 超碰在线98 | 丁香婷婷激情网 | 国产精品一区二区久久精品爱涩 | 色中文字幕在线观看 | 久一久久 | 中文字幕 在线看 | 视频在线播放国产 | 国产小视频福利在线 | 天天天天综合 | 国产资源中文字幕 | 麻豆国产精品视频 | 在线av资源 | 久久手机免费视频 | 91网址在线观看 | 丁香六月天 | 天天操天天爽天天干 | 色婷婷六月天 | 天天色影院 | 美女黄视频免费 | 天天射网站 | 国产精品激情偷乱一区二区∴ | 国产欧美最新羞羞视频在线观看 | 美女久久久久 | 青青河边草免费视频 | 日韩福利在线观看 | 成人午夜性影院 | 精品视频免费久久久看 | 日韩在线观看第一页 | 国产成人av一区二区三区在线观看 | 日韩在线网址 | 97成人在线观看视频 | 天天鲁一鲁摸一摸爽一爽 | 国产在线免费观看 | 亚洲激情网站免费观看 | 高清有码中文字幕 | 成人毛片在线观看 | 国产亚洲精品久 | 成人国产精品久久久 | 久久私人影院 | 97精品国产97久久久久久久久久久久 | 国产视频欧美视频 | 超碰人人av| 少妇bbr搡bbb搡bbb | av片子在线观看 | 国产精品九九久久久久久久 | 国产手机在线播放 | 在线成人中文字幕 | 日韩素人在线观看 | 国产美女黄网站免费 | sm免费xx网站 | 成人小电影在线看 | 99热日本| 91亚洲综合 | 中文字幕中文中文字幕 | 久草青青在线观看 | 亚洲婷婷在线 | 二区在线播放 | 欧美日韩高清在线一区 | 国产成人精品免高潮在线观看 | 免费欧美高清视频 | 午夜av电影 | 女人18片毛片90分钟 | 国产精品成人免费一区久久羞羞 | 国产一级一级国产 | 国产精品高潮呻吟久久av无 | 久久久久久免费网 | 久久视频国产 | 日本在线中文在线 | 国产精品 日韩精品 | 成人精品一区二区三区电影免费 | 天天搞天天干天天色 | 99精品欧美一区二区三区黑人哦 | 国产 日韩 在线 亚洲 字幕 中文 | 国产一级一片免费播放放 | 中文字幕免费看 | 中文字幕人成乱码在线观看 | 黄污在线看 | 亚洲国产精品视频在线观看 | 免费网站在线观看人 | 久久69精品| 国产一级不卡视频 | 国内精品免费久久影院 | 亚洲午夜电影网 | 国产亚洲综合精品 | 2018亚洲男人天堂 | 超碰在线观看99 | 99视频国产精品 | 国产一区免费在线观看 | 最近中文字幕免费大全 | 69精品| 国产色爽 | 婷婷六月久久 | 97视频免费观看2区 亚洲视屏 | 色婷婷综合久久久久 | 91桃色免费观看 | 亚洲精品高清在线观看 | 激情视频久久 | 色婷婷av在线 | 8090yy亚洲精品久久 | 日韩电影中文字幕 | 婷婷久久综合九色综合 | 中文高清av | 99久久久国产精品免费99 | 中文字幕亚洲不卡 | 成在线播放 | 亚洲精品国产精品久久99热 | 精品免费一区二区三区 | 精品国产区在线 | 丁香激情综合久久伊人久久 | 操处女逼| 欧美analxxxx | 深爱激情五月婷婷 | 中文字幕av全部资源www中文字幕在线观看 | 国产精品乱码久久久久 | 成人18视频 | 亚洲手机天堂 | 日韩区欧美久久久无人区 | 久久毛片网 | 国产高清精品在线观看 | 国产麻豆精品一区 | 黄色综合| 超碰在线色 | 久久精品视频99 | 一区二区三区四区精品视频 | 麻豆国产精品va在线观看不卡 | 亚洲人成人天堂h久久 | 婷婷国产精品 | 91人人在线 | 最近中文字幕免费视频 | 午夜久久网站 | 亚洲国产中文字幕 | 97人人人| 亚洲乱码精品久久久 | 欧美伦理电影一区二区 | 久久久久久久久久久免费视频 | 亚洲欧美激情精品一区二区 | 五月天婷婷在线视频 | 视频国产一区二区三区 | 五月婷婷电影网 | 99这里有精品 | 精品亚洲免a | 国产伦精品一区二区三区照片91 | 国产视频二区三区 | 亚洲在线高清 | 亚洲伦理一区二区 | 四虎影视成人精品国库在线观看 | 日韩免费电影一区二区三区 | 99久久国产免费免费 | www操操操| 免费av免费观看 | 五月婷婷网站 | 色999五月色 | 欧洲一区二区三区精品 | 久久伊人色综合 | 日韩精品欧美专区 | 在线直播av | 一区二区三区免费看 | 中文字幕在线播放一区二区 | caobi视频 | 视频1区2区 | 中文字幕av全部资源www中文字幕在线观看 | 在线免费黄网站 | 午夜精品久久久99热福利 | 欧美在线一二 | 成人网页在线免费观看 | 中文字幕在线免费看 | 在线性视频日韩欧美 | 日韩在线视频观看 | 亚洲欧洲精品一区二区 | 在线视频 国产 日韩 | 午夜免费电影院 | 免费看十八岁美女 | 亚洲精品456在线播放 | 日日天天狠狠 | 在线亚洲观看 | 久草免费在线视频 | 天天爱天天操天天爽 | 国产精品淫 | 国产美腿白丝袜足在线av | 日日夜夜亚洲 | 欧美精品乱码99久久影院 | 国产精品综合久久久 | 美女视频久久久 | 狠狠狠色丁香综合久久天下网 | 97小视频 | 色婷婷狠狠18 | 伊人久在线 | 97色婷婷成人综合在线观看 | 欧美福利久久 | 国产精品中文久久久久久久 | 亚洲精品久久久久中文字幕m男 | 日韩高清成人在线 | 久久xx视频 | 手机av观看 | 中文字幕一二三区 | 精品一区在线 | av片一区二区 | 伊人激情网 | 免费大片av | 国产精品99久久久久久有的能看 | 在线观看视频免费播放 | av官网| 97在线影院 | 国产一区二区高清视频 | 色综合久久久久 | 在线观看91 | 韩国av免费看 | 欧美日韩首页 | 亚洲日韩中文字幕 | 一区在线电影 | 91在线视频精品 | 韩日精品中文字幕 | 中文在线字幕观看电影 | av女优中文字幕在线观看 | 九九久久电影 | 国产一线天在线观看 | 美女啪啪图片 | 在线精品一区二区 | 天天综合五月天 | 97精品在线 | 久久99电影 | 很黄很黄的网站免费的 | 99精品视频在线播放观看 | 国产一区二区三区四区大秀 | 97影视 | 亚洲精品短视频 | 天天操天天吃 | av中文在线观看 | 成人三级视频 | 97看片网| 精品少妇一区二区三区在线 | 国产成人在线免费观看 | 99热在线观看免费 | 91免费日韩 | 亚洲手机天堂 | 五月天婷亚洲天综合网鲁鲁鲁 | 成人久久影院 | 日韩av一卡二卡三卡 | 99久久爱| 91av视频免费在线观看 | 久久综合国产伦精品免费 | 人人爽人人av | 中文字幕一区二区三区在线观看 | 国产一级电影免费观看 | sesese图片 | 99在线精品视频在线观看 | 日韩欧美视频一区二区三区 | 国产成人在线看 | 99精品视频网| 中文字幕激情 | 久久久精品成人 | 在线观看av中文字幕 | 91av电影在线观看 | 一本一本久久a久久精品牛牛影视 | 国产精品18毛片一区二区 | 国产精品午夜av | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 午夜在线看片 | 成人免费视频播放 | 五月天亚洲精品 | 成人黄大片视频在线观看 | 色婷婷在线视频 | 久久婷婷精品 | 国产一区精品在线观看 | 久久精品99国产国产 | 国产成人av综合色 | 西西444www大胆无视频 | 亚洲成人av电影在线 | 久久久久久久久久久久久国产精品 | 免费av试看 | 欧美日韩在线视频一区二区 | 国内揄拍国产精品 | 99视频黄| 日本爱爱片 | 91在线视频观看免费 | 中文字幕大全 | 婷婷亚洲综合 | 亚洲日本欧美在线 | 91污视频在线观看 | 欧美日韩国产精品一区二区三区 | 日韩在线观看 | www.久久婷婷 | 三级av在线免费观看 | 视频在线99re | 国产免费小视频 | 色综合色综合色综合 | av中文字幕在线播放 | 成人黄在线观看 | 激情图片区 | 日韩久久久久久久 | 最近最新最好看中文视频 | 深夜福利视频在线观看 | 色婷婷狠狠 | 亚洲欧美久久 | 中文字幕在线播放日韩 | 国产亚洲一级高清 | 伊人天堂av| 午夜av网站 | 国产精品美女999 | 91精品推荐| 日韩理论电影在线观看 | 夜夜婷婷 | 日韩欧美在线观看一区二区三区 | 中文在线中文资源 | 青青河边草免费观看 | 久久婷婷色 | 亚洲国产精品va在线看黑人 | 久久亚洲私人国产精品va | 亚洲欧美视频 | 亚洲一级在线观看 | 欧美日韩一二三四区 | 亚洲国产精品久久久久久 | 91综合色 | 91精品区 | 91av免费看 | 日韩av电影手机在线观看 | 麻豆成人在线观看 | 日日爱av| 波多野结衣在线观看一区 | 亚a在线| 在线 影视 一区 | 欧美日韩亚洲在线 | 久久久久欠精品国产毛片国产毛生 | 婷婷天天色 | 午夜少妇一区二区三区 | 日本久久片| 久草在线视频网站 | 国产精品欧美在线 | 国产成a人亚洲精v品在线观看 | 久久久久久久久久久成人 | 99久久精品国 | 国产免费亚洲 | 欧美精品免费在线观看 | 国产中的精品av小宝探花 | 六月色婷婷 | 四虎成人精品永久免费av | www.97色.com| 1024手机看片国产 | a视频在线观看 | 国产不卡在线观看 | 91亚洲激情 | 久久精品视频国产 | 欧美激情视频在线免费观看 | 免费观看十分钟 | 激情丁香 | 久久久久久久久久久久国产精品 | 天天综合91 | a视频在线| 久久电影中文字幕视频 | 久久精品网址 | 午夜精品成人一区二区三区 | 日韩视频中文字幕在线观看 | 91精品在线视频 | 天天操天天操天天操天天操 | 国产视频在线观看一区 | 国产99久久久国产精品免费二区 | 黄色免费网站下载 | 人人澡人人舔 | 在线观看黄色小视频 | 久久五月情影视 | 国产黄色资源 | 久久久久成| 99精品视频观看 | 久久久官网 | 超级碰99 | 免费看的黄色片 | a天堂最新版中文在线地址 久久99久久精品国产 | 日日干天天操 | 91秒拍国产福利一区 | 成人在线免费看视频 | 亚洲一级片在线看 | 麻豆综合网 | 中文字幕网站视频在线 | 亚洲精品视频免费观看 | 欧美另类亚洲 | 蜜臀久久99精品久久久酒店新书 | 日韩欧美在线播放 | 日韩中文在线视频 | 97狠狠干| 在线观看黄网 | av一级在线观看 | 日韩一二区在线观看 | 九九亚洲精品 | 91九色蝌蚪国产 | 成+人+色综合 | 国产精品 中文字幕 亚洲 欧美 | 91天堂影院 | 五月天激情视频在线观看 | 天天操 夜夜操 | 日韩高清在线一区二区 | 国产91精品一区二区麻豆网站 | 丰满少妇一级 | 国产精品一区在线观看你懂的 | 国产99久久精品一区二区永久免费 | 黄色国产在线 | 亚洲欧洲中文日韩久久av乱码 | 日韩欧美国产激情在线播放 | av中文字幕免费在线观看 | 日b视频在线观看网址 | 精品亚洲午夜久久久久91 | 国产精品美女久久久久久久网站 | 深夜福利视频一区二区 | 日韩免费视频观看 | 丁香婷婷激情国产高清秒播 | 成人三级网站在线观看 | 亚洲色图激情文学 | 蜜桃视频成人在线观看 | 天天操天天操天天操天天操天天操 | 亚洲国产成人av网 | 久综合网 | 女人18片毛片90分钟 | 欧美日韩性生活 | 欧美亚洲免费在线一区 | 成人在线播放av | 黄色中文字幕在线 | 一级性视频| 91在线观| 国产免费观看久久黄 | 99久久国产免费看 | www.综合网.com | 波多野结衣在线播放视频 | 激情五月亚洲 | 97日日 | 手机av电影在线 | 97香蕉久久超级碰碰高清版 | 天天色棕合合合合合合 | 日日干干夜夜 | 国产成人精品一区一区一区 | 亚洲免费在线看 | 欧美性猛片 | 欧美精品亚州精品 | 黄色成人免费电影 | av资源免费在线观看 | 8x成人免费视频 | 欧美日韩1区 | 热久久精品在线 | 91在线精品视频 | 2020天天干天天操 | 午夜少妇一区二区三区 | 中文av在线免费观看 | 久久精品国产一区 | av午夜电影 | 999视频在线播放 | 奇米先锋 | 婷婷婷国产在线视频 | 亚洲午夜久久久久久久久电影网 | 欧美国产91 | 91一区二区三区久久久久国产乱 | 中文国产字幕在线观看 | 亚洲一区免费在线 | 91福利国产在线观看 | 中文欧美字幕免费 | 婷婷色在线 | 麻豆视频免费入口 | 日韩在线观看的 | 日韩欧美精品一区二区三区经典 | 亚洲精品456在线播放乱码 | 日韩免费播放 | 欧美激情精品久久久 | 国产日韩精品一区二区三区在线 | 国产麻豆精品免费视频 | 国产精久久久久久妇女av | 高清不卡一区二区在线 | 精品国产精品久久一区免费式 | 日本午夜免费福利视频 | 国产热re99久久6国产精品 | 在线精品观看国产 | 日日操操操 | 在线视频 一区二区 | 奇米影视在线99精品 | 成人午夜电影网站 | 久久久在线观看 | 天天射天天射天天射 | 九草在线观看 | 日日干激情五月 | www.黄色小说.com | 91av免费看 | 丁香网五月天 | 国产中文在线字幕 | 日韩视频免费观看高清完整版在线 | 午夜视频在线观看一区二区 | a天堂中文在线 | 国产日韩欧美在线观看 | 天天干天天做天天爱 | 久久国产成人午夜av影院宅 | 91久久久久久国产精品 | 伊人五月在线 | 国产黄色精品在线 | 91天堂在线观看 | 4hu视频| 中文字幕日韩精品有码视频 | 插插插色综合 | 久久久久久久久久久久久影院 | 日韩在线网址 | 色网站在线看 | 免费看片网页 | 国产视频在线免费观看 | 激情婷婷综合网 | 国产麻豆精品一区 | 久久看视频 | 91新人在线观看 | 成人超碰在线 | 亚洲成人午夜在线 | 国产精品第 | 久久久久久久久久久久久影院 | 日日操天天操狠狠操 | 99久免费精品视频在线观看 | 免费不卡中文字幕视频 | 玖玖视频在线 | 免费网址在线播放 | 国产精品久久久久高潮 | 久久久久激情 | 久久理伦片| 精品国产一区二区久久 | 五月婷在线播放 | 成人午夜电影网 | 日韩精品在线视频免费观看 | 狠狠操狠狠操 | 黄污在线观看 | 91精品成人久久 | 天天操比 | 国产视频在 | 日日摸日日碰 | 中文字幕影片免费在线观看 | 久久免费激情视频 | 超碰个人在线 | 国产福利一区在线观看 | 九九电影在线 | 日韩激情视频在线 | 亚洲在线网址 | 国产乱对白刺激视频在线观看女王 | 久草在线官网 | 中文av日韩 | 精品在线观看一区二区三区 | 麻豆视频成人 | 久久天天躁夜夜躁狠狠躁2022 | 99热高清| 亚洲乱码国产乱码精品天美传媒 | 国产黄色播放 | 91视视频在线直接观看在线看网页在线看 | 国产资源 | 中文不卡视频 | 777xxx欧美| 国产流白浆高潮在线观看 | 精品国产乱码久久久久久1区2匹 | 久久男人中文字幕资源站 | 91少妇精拍在线播放 | 国产精品久一 | 免费在线观看av不卡 | 欧美成人免费在线 | av不卡免费在线观看 | 色久网| 成人黄色小说在线观看 | 亚洲视频精品在线 | 精品久久久久久综合日本 | 17videosex性欧美 | 国产99久久久国产精品免费看 | 午夜视频一区二区三区 | 最近的中文字幕大全免费版 | 中文字幕av全部资源www中文字幕在线观看 | 欧美性猛片 | 天天操天天能 | 激情av资源网 | 日韩视频一区二区三区在线播放免费观看 | 日日日操操 | 久久精品一二三区白丝高潮 | 在线观看国产一区二区 | 青青五月天 | 日本精油按摩3 | 国产精品免费视频网站 | 在线看污网站 | 国产精品视频99 | 激情综合站| 丁香婷婷色月天 | 亚洲天堂网站视频 | 最新国产在线 | 97精产国品一二三产区在线 | 在线高清 | 日本中文字幕在线视频 | www.亚洲激情.com | 国产精品九九九九九九 | 成人性生交大片免费观看网站 | 久久黄色免费视频 | 人人爱人人添 | 国产小视频在线观看免费 | 黄色一区二区在线观看 | 国产精在线 | 手机成人在线电影 | 伊人手机在线 | 国产黄a三级三级三级三级三级 | 国产亚洲在 | 手机成人在线电影 | 久久综合狠狠综合久久激情 | 97操操| 中文国产在线观看 | 中文字幕免费观看 | 福利片视频区 | 一级特黄av | 九九热在线视频免费观看 | 国产精华国产精品 | 高清国产午夜精品久久久久久 | 精品二区视频 | 超碰在线人人爱 | 精品国产美女在线 | 中文字幕五区 | 涩涩网站在线观看 | 久久久激情视频 | 91在线看黄| 成人app在线播放 | 国产精品一区二区在线播放 | 亚一亚二国产专区 | 91成年人网站 | 日本最新高清不卡中文字幕 | 成年人免费观看国产 | 99成人精品 | 97超碰资源站 | 香蕉视频网站在线观看 | 久久久久免费精品国产小说色大师 | 人人澡澡人人 | 中文字幕在线视频免费播放 | 99精品国产福利在线观看免费 | 亚洲日韩欧美一区二区在线 | 色噜噜日韩精品欧美一区二区 | 国产丝袜一区二区三区 | 美女精品在线 | 国产不卡av在线播放 | 少妇自拍av | 久久综合狠狠综合久久狠狠色综合 | 亚洲成人精品国产 | 91看片淫黄大片在线播放 |