棧與隊列 c語言

1棧的定義,特點
定義:棧(stack)是限定僅在表尾進行插入和刪除操作的線性表。
特點:先入後出,後入先出

2 棧的注意點

首先它是一個線性表,也就是說,棧元素具有線性關係,即前驅後繼關係。只不過它是一種特殊的線性表而已。定義中說是在線性表的表尾進行插入和刪除操作,這裏表尾是指棧頂,而不是棧底。它的特殊之處就在於限制了這個線性表的插入和刪除位置,它始終只在棧頂進行。這也就使得:棧底是固定的,最先進棧的只能在棧底。
棧的插入操作,叫作進棧,也稱壓棧、入棧。
棧的刪除操作,叫作出棧,也有的叫作彈棧。

3 棧的作用

棧的引入簡化了程序設計的問題,劃分了不同關注層次,使得思考範圍縮小,更加聚焦於我們要解決的問題核心。反之,像數組等,因爲要分散精力去考慮數組的下標增減等細節問題,反而掩蓋了問題的本質。

4 遞歸的定義

在高級語言中,調用自己和其他函數並沒有本質的不同。我們把一個直接調用自己或通過一系列的調用語句間接地調用自己的函數,稱做遞歸函數。

5 遞歸注意點

每個遞歸定義必須至少有一個條件,滿足時遞歸不再進行,即不再引用自身而是返回值退出。

6 迭代和遞歸的區別

迭代使用的是循環結構,遞歸使用的是選擇結構。遞歸能使程序的結構更消晰、更簡潔、更容易讓人理解,從而減少讀懂代碼的時間。但是大量的遞歸調用會建立函數的副本,會耗費大量的時間和內存。迭代則不需要反覆調用函數和佔用額外的內存。因此我們應該視不同情況選擇不同的代碼實現方式。

7 隊列的定義

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

8 隊列的特點

隊列是一種先進先出(First In First Out)的線性表,簡稱FIFO。允許插入的一端稱爲隊尾,允許刪除的一端稱爲隊頭。

9 隊列的鏈式存儲結構

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

10 如何解決順序存儲的弊端

對於棧來說,如果是兩個相同數據類型的棧,則可以用數組的兩端作棧底的方法來讓兩個棧共享數據,這就可以最大化地利用數組的空間。
對於隊列來說,爲了避免數組插人和刪除時需要移動數據,於是就引入了循環隊列,使得隊頭和隊尾可以在數組中循環變化。解決了移動數據的時間損耗,使得本來插入和刪除是O(n)的時間複雜度變成了O(1)。

發佈了38 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章