日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

栈和队列学习要点

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈和队列学习要点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 重點/難點/要點
  • 知識點整理
  • 練習

概述

棧和隊列是常用的基本數據結構,不僅直接用于描述問題,而且作為輔助數據結構大量用于算法實現中。從數據元素間的邏輯關系看,棧和隊列是線性結構;從操作方式和操作集合看,棧和隊列與線性表有很多不同,有各自的特殊性,但都是操作受限的線性表。本章知識點的組織結構如下圖所示:

重點/難點/要點

本章的重點是:

  • 棧和隊列的操作特性;
  • 棧和隊列基本操作的實現。
  • 本章的難點是:

  • 循環隊列的存儲方法;
  • 循環隊列中隊空和隊滿的判定條件。
  • 棧學習要點
    對于棧要抓住一條明線:棧的邏輯結構→棧的存儲結構→棧的實現。
    對于棧的邏輯結構,要從棧的定義入手,在與線性表的定義和操作比較的基礎上,得出棧的操作特性,最后給出棧的抽象數據類型定義。
    對于棧的存儲結構要把握兩條支線:順序棧和鏈棧,棧的存儲結構及實現都與線性表類似,本質上是線性表的簡化。
    對于棧的主要抓住以下三條暗線。

  • 順序棧和順序表的比較:將順序棧與順序表的存儲方法進行比較,將順序棧的算法實現與順序表的算法實現進行比較。
  • 鏈棧和單鏈表的比較:將鏈棧與單鏈表的存儲方法進行比較,將鏈棧的算法實現與單鏈表的算法實現進行比較。
  • 順序棧和鏈棧的比較;將順序棧與鏈棧的存儲方法進行比較,將順序棧和鏈棧的算法實現進行比較。
  • 隊列學習要點
    對于隊列的教學要抓住一條明線:隊列的邏輯結構→隊列的存儲結構→隊列的實現。
    對于隊列的邏輯結構,要從隊列的定義出發,在與線性表的定義和操作比較的基礎上,得出隊列的操作特性,最后給出隊列的抽象數據類型定義。
    對于隊列的存儲結構要把握兩條支線:循環隊列和鏈隊列,隊列的存儲結構及實現與線性表類似,本質上是線性表的簡化。
    隊列的暗線與棧的暗線類似,此外,還要把握以下兩條暗線。

  • 棧和隊列的比較:將二者的操作特性進行比較,將二者的存儲結構進行比較,將二者的基本操作及其實現進行比較,在不斷比較的過程中加深對棧和隊列的理解。
  • 循環隊列的引入過程:不要直接引入循環隊列存儲方法,而要貫徹提出問題、分析問題、解決問題的方式逐漸引入循環隊列,一方面訓練邏輯思維能力,另一方面也體現了存儲結構的靈活性。
  • 知識點整理

  • 棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素除了具有線性關系外,還具有后進先出的特性。
  • 棧的順序存儲結構稱為順序棧,順序棧本質上是順序表的簡化。通常把數組中下標為0的一端作為棧底,同時附設指針top指示棧頂元素在數組中的位置。
  • 實現順序棧基本操作的算法的時間復雜度均為O(1)。
  • 棧的鏈接存儲結構稱為鏈棧,通常用單鏈表表示,并且不用附加頭結點。
  • 鏈棧的插入和刪除操作只需處理棧頂即開始結點的情況,其時間復雜度均為O(1)。
  • 隊列是只允許在一端進行插入操作,而另一端進行刪除操作的線性表。隊列中的元素除了具有線性關系外,還具有先進先出特性。
  • 順序隊列會出現假溢出問題,解決的辦法是用首尾相接的順序存儲結構,稱為循環隊列。在循環隊列中,凡是涉及隊頭或隊尾指針的修改都需要將其求模。
  • 在循環隊列中,隊空的判定條件是:隊頭指針=隊尾指針;在浪費一個存儲單元的情況下,隊滿的判定條件是:(隊尾指針+1)%數組長度=隊頭指針。
  • 隊列的鏈接存儲結構稱為鏈隊列。鏈隊列通常附設頭結點,并設置隊頭指針指向頭結點,隊尾指針指向終端結點。
  • 鏈隊列基本操作的實現本質上也是單鏈表操作的簡化,插入只考慮在鏈隊列的尾部進行,刪除只考慮在鏈隊列的頭部進行,其時間復雜度均為O(1)。
  • 練習


    在棧滿的情況下不能做進棧操作,否則將產生上溢,因此對于入棧操作首先要判斷是否棧滿。(×)
    棧結構只允許在棧頂進行存取操作,所有基本操作的時間復雜度均是O(1)。(√)
    三個元素按a、b、c的次序進棧,且每個元素只允許進一次棧,則出棧序列一定是abc。(×)
    在順序棧的類定義中,成員變量top是指針類型。(×)
    設top表示棧頂元素所在下標,順序棧的棧空條件是(B),棧滿條件是(D)。
    A.top=0 B.top=-1 C.top=StackSize D.top=StackSize-1
    鏈棧附設頭結點不會使插入、刪除等基本操作更加方便。(√)
    在鏈棧中執行入棧操作需要修改兩個指針,同單鏈表的插入操作一樣,修改指針有先后順序。(√)
    在順序棧和鏈棧中,語句“top- -;”實現將top指向當前棧頂元素的下一個元素。(×)

    隊列
    有三個元素按a、b、c的順序入隊,每個元素只能入隊一次,則出隊序列只能是abc。(√)
    在順序隊列中,入隊操作和出隊操作的時間復雜度均是O(1)。(×)
    由于隊列的單向移動性,順序隊列一定會發生假溢出現象。(×)
    由于隊列只允許在線性表的兩端執行存取操作,所有基本操作的時間復雜度均為O(1)。(√)
    設存儲循環隊列的數組長度為m,則(rear+1)%m實現將rear的值在循環意義下加1。(√)
    在鏈隊列中附設頭結點,能夠使入隊和出隊操作更加方便。(√)
    在循環隊列中,設front指向隊頭元素的前一個位置,則當前的隊頭元素是(C)。
    A.data[front] B.data[++front] C.data[(front+1)%m] D.data[front++]
    在鏈隊列中,出隊操作在隊頭執行,與rear指針無關。(B)(要判空)
    若用一個長度為6的數組來實現循環隊列,且當前rear和front的值分別為4和2,則從隊列中刪除一個元素,再增加兩個元素后,rear的值是(0),front的值是(3)。

    參考資料:《數據結構(從概念到C++實現)》清華大學出版社,王紅梅

    總結

    以上是生活随笔為你收集整理的栈和队列学习要点的全部內容,希望文章能夠幫你解決所遇到的問題。

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