1. 程式人生 > >資料結構-棧和佇列小結

資料結構-棧和佇列小結

1棧

  1>棧的定義:

      棧是限定僅在表尾進行插入和刪除操作的線性表。

      我們把插入和刪除的一端稱為棧頂(TOP),另一端稱為棧底(BOTTOM),不包含任何元素的棧稱為空棧。棧又稱為後進先出(Last in first out)的線性表,簡稱LIFO結構。

   2>棧的儲存結構

    由於棧也是線性表,因此線性表的儲存結構對棧也使用,通常有順序棧和鏈棧兩種儲存結構,這兩種儲存結構的不同,即使得實現棧的基本運算的演算法也有所不同。

     (1)順序儲存結構 

               其實棧的順序儲存還是挺方便的,因為他只准棧頂進出元素,所以不存線上性表插入和刪除時需要移動元素的問題。不過它有一個很大的缺陷,就是必須事先確定陣列儲存空間大小,玩意不夠用了,就需要程式設計手段來擴充套件陣列的容量,非常麻煩,

     (2)鏈式儲存結構

       如果棧的使用過程中元素變化不可預測,有時很小,有時非常大,那麼最好是用鏈棧【儲存空間不固定可伸縮】。

2 佇列

  1>佇列的定義

      佇列(queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

      佇列是一種先進先出(first in first out)的線性表,簡稱FIFO。允許插入的一端稱為隊尾(rear),允許刪除的一端稱為隊頭(Front)。

      佇列是一種運算受限的線性表,它的運算限制與棧不同,是兩頭都有限制,插入只能在表的一端進行(只進不出),而刪除只能在表的另一端進行(只出不進)。

   2>佇列的儲存結構

       佇列也是線性表,所以有兩種儲存方式,順序儲存和鏈式儲存。

     (1)順序儲存結構(順序佇列)

       缺點,儲存空間不夠用的時候需要開發人員通過程式設計手段來擴充套件陣列容量。

              衍生迴圈佇列:頭尾相接的順序儲存結構成為迴圈佇列。

     (2)鏈式儲存結構(鏈隊)

               佇列的鏈式儲存結構,其實也就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈佇列。

總結:

    棧(stack)是限定在表尾進行插入和刪除操作的線性表。

    佇列(queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。它們均可使用線性表的順序儲存結構來實現,但都存在著順序儲存的一些弊端(空間不夠用)。因此它們各自有各級的技巧來解決這個問題,

    對於棧來說,如果是兩個相同資料型別的棧,則可以用陣列的兩端作為棧底的方法來讓兩個棧共享資料,這就可以最大化地利用陣列的空間。

    對於佇列來說,為了避免陣列插入和刪除時需要移動資料,於是就引入了迴圈佇列,使得隊頭和隊尾可以在陣列中迴圈變化。解決了移動資料的時間損耗。

    他們也都可以通過鏈式儲存結構來實現,實現原則上與線性表基本相同。



相關推薦

資料結構-佇列小結

1棧   1>棧的定義:       棧是限定僅在表尾進行插入和刪除操作的線性表。       我們把插入和刪除的一端稱為棧頂(TOP),另一端稱為棧底(BOTTOM),不包含任何元素的棧稱為空棧。棧又稱為後進先出(Last in first out)的線性表,簡稱L

資料結構 - 佇列

資料結構 - 棧和佇列 介紹 棧和佇列是兩種很簡單, 但也很重要的資料結構, 在之後的內容也會用到的

資料結構---佇列結構體實現)

棧(LIFO) 棧(stack)是一種只能在一端進行插入或刪除操作的線性表。 棧頂(top):允許進行插入、刪除操作的一端 棧底(bottom):另一端稱為棧底 進棧或入棧(push):插入操作 出棧或退棧(pop):棧的刪除操作 n個不同元素通過一個棧產生的出棧

資料結構---佇列(例題、練習及解答)

棧的應用 Q1:簡單表示式求值 限定的簡單表示式求值問題是使用者輸入一個包含+、-、*、/、正整數和圓括號的合法算術表示式,計算該表示式的結果。 思路:(1)將算術表示式轉換成字尾表示式 (2)字尾表示式求值 具體執行程式碼: #include <

資料結構——佇列

棧和佇列 一、選擇題 ~~01|03|1|1 ^^設有一個遞迴演算法如下 int fact(int n) { //n大於等於0 if(n<=0) return 1; else return n*fact(n-1); } 則計算fact(n)

資料結構佇列、遞迴演算法

知識要點: 棧的定義、結構特點及其儲存方式(順序儲存與連結儲存)和基本操作的實現演算法; 佇列的結構、特點及其儲存方式(順序儲存與連結儲存)和基本操作的實現演算法。 遞迴的基本概念和實現原理以及用遞迴的思想描述問題和書寫演算法的方法; 用棧實現遞迴問題的非遞迴解法。

資料結構 佇列

文章目錄 1 棧 1.1 抽象資料型別棧的定義 1.1.1 棧頂和棧尾 1.1.2 空棧 1.1.3 特點 1.1.4 上溢和下溢 1.2 棧的表示和實現 1.2.1

資料結構佇列(五)的順序儲存結構鏈式儲存結構的實現

一、 實驗目的1. 熟悉棧的特點(先進後出)及棧的抽象類定義;2. 掌握棧的順序儲存結構和鏈式儲存結構的實現;3. 熟悉佇列的特點(先進先出)及佇列的抽象類定義;4. 掌握棧的順序儲存結構和鏈式儲存結構的實現;二、實驗要求1. 複習課本中有關棧和佇列的知識;2. 用C++語言

還債系列之資料結構——佇列

三、棧 還記得當初第一次學習程式設計的時候還是8051微控制器中的組合語言,現在還記得很清楚,當初遇到的一個簡單的資料結構就是——棧,對應的組合語言中的命令是push和pop。這個結構在生活中是有很多類似的例子的,比如水杯、碗等。該結構的特點如下: 最大特

資料結構-佇列面試題(下)

面試題四:元素出棧、入棧順序的合法性。如入棧的序列(1,2,3,4,5),出棧序列為(4,5,3,2,1)。 思路: ①首先判斷出棧入棧序列長度是否一致,不一致直接返回false; ②借用一個臨時的棧,依次遍歷入棧序列的每一個元素,每次

資料結構 佇列 演算法設計題

五 演算法設計題 1. 設有兩個棧S1,S2都採用順序棧方式,並且共享一個儲存區[O..maxsize-1],為了儘量利用空間,減少溢位的可能,可採用棧頂相向,迎面增長的儲存方式。試設計S1,S2有關入棧和出棧的操作演算法。 【哈爾濱工業大學 2001 七 (12分)】 2

資料結構:佇列-迷宮問題求解

//--------------------檔名:Maze.cpp------------------------//----------------------By SunxySong-------------------------//說明:本程式以迷宮問題進行演示,瞭解

資料結構--佇列的面試題

實現一個棧,要求實現Push(出棧)、Pop(入棧)、Min(返回最小值)的時間 複雜度為O(1) 方法1、棧Push時:當棧為空時,push兩次第一個資料。棧頂的數來儲存當前狀態的最小值。 再次Push資料時候,先拿將要Push的資料與棧頂的最小值進行比較,更

資料結構-佇列——20150602

//順序棧定義及實現 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //函式結果狀態程式碼 #define TRUE 1 #define

資料結構-佇列面試題(上)

在資料結構的學習過程中,棧和佇列的掌握是十分重要的。所以找了幾個很熱門的面試題試試手並小結一下。先回顧下棧和佇列的特性:棧是後進先出,主要介面有PUSH,POP,TOP,而佇列是先進先出,主要介面有PU

C資料結構-佇列,括號匹配舉例---ShinePans

1.棧和佇列是兩種特殊的線性表             運算操作被限定只能在表的一端或兩端插入,刪除元素,故也稱它們為限定的線性表結構 2.棧的基本運算 1).Stackinit(&s) 構造一個空棧 2).Stackempty(s) 判斷s是否為空棧,當s為空棧

資料結構-佇列

                  &n

線性結構 -- 佇列

線性結構 – 棧和佇列 線性結構是一個有序資料元素的集合。 常用的線性結構有:線性表,棧,佇列,雙佇列,陣列,串。 常見的非線性結構有:二維陣列,多維陣列,廣義表,樹(二叉樹等),圖。 特徵: 1.集合中必存在唯一的一個"第一個元素"; 2.集合中必存在唯一的一個"最後的元素

資料結構-佇列

棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表 我們把允許插入和刪除的一端稱為棧頂 (top) ,另一端稱為棧底 (bottom) ,不含任何資料元素的棧稱為空棧。 棧又稱為後進先出 (Last In Filrst Out) 的線性表,簡稱LIFO結構。 理解棧的定義需要注意:

資料結構--佇列

一、定義 1、棧的操作   注意:棧的插入和刪除改名叫push和pop   2、棧的順序儲存結構和實現 1)進棧操作 2)出棧的操作 3、兩棧共享空間 注意: