C語言是面向過程的,而C++是面向對象的
C和C++的區(qū)別:
C是一個結構化語言,它的重點在于算法和數(shù)據(jù)結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現(xiàn)過程(事務)控制)。
C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或實現(xiàn)過程(事務)控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設計的基礎,好的設計如果沒有好的算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。

前面介紹過棧,它有著后進先出的特點,今天介紹的隊列其特點是先進先出,他們都在實際開發(fā)中應用廣泛,今天主要先介紹鏈隊跟非循環(huán)隊列,明天繼續(xù)介紹循環(huán)隊列,其實都比較簡單,這些在數(shù)據(jù)結構中很基礎,當然還有一種形式的隊列,那就是雙端隊列,但是雙端隊列并不常用,因此暫時不坐討論。
一、隊列簡介:
除去雙端隊列,一般形式的隊列,只能在表的一端(表尾)添加數(shù)據(jù)元素,而在表的另一端(表頭)只能刪除數(shù)據(jù)元素,這些操作也是線性表操作的子集,因此就很簡單。當然隊列也可以用鏈表實現(xiàn),也可以順序實現(xiàn),下面就先從鏈隊開始講起。
二、鏈隊:
既然是鏈嘛,那么我們肯定需要定義一個結構體來表示每個數(shù)據(jù)元素的結點,當然我們就簡單定義一個,如下:

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!
結點定義
其中ElemT是用#define定義的宏,可以是整型、字符型、同樣也可以是結構體類型,這里我們代表整型。第二個next指針想必大家都知道,用于鏈接兩結點。
當然了,既然是隊列嘛,由上面隊列簡介,那么我們還需要兩個指針,來分別指向頭跟尾,那么我們還用結構體類型來定義,如下:
隊列頭尾指針
這樣基本的定義已經好了,現(xiàn)在主要開始構造鏈隊了,首先我們需要一個結點,來代表初始情況,但是該結點中數(shù)據(jù)區(qū)并不存放元素,只代表初始情況。下面看代碼:
初始化
可以看到頭尾指向同一結點,并且把該結點中next指針賦值為空。其實很簡單,下面看一下如何添加元素,先看一下示意圖:
添加元素示意圖
圖上,我們添加元素時是向下延伸的,下面是隊尾,可以看到,要想添加新元素,那么必須先創(chuàng)建一個新結點,然后讓上一個next指針指向新創(chuàng)建的結點,而后改變隊尾,讓隊尾指針重新指向新結點。實現(xiàn)函數(shù)如下:
添加元素函數(shù)
簡短的代碼,可以看出很簡單。下面看一看刪除操作示意圖:
小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!
刪除元素示意圖
上面示意圖說的很清楚我們該函數(shù)該怎么寫,先看看函數(shù)中的內容:
刪除讀取元素函數(shù)
首先創(chuàng)建一個局部指針,然后檢查該隊列是否為空,然后呢,把第一個存有數(shù)據(jù)的結點賦給局部指針,然后在把數(shù)據(jù)元素取出給e,然后把頭指針指向下下個結點,然后檢查下下個結點是否結束最后一個尾指針,如果是,那么令兩指針相等,釋放空間,每次讀取玩一個結點的數(shù)據(jù),應該將該結點所占的內存空間釋放。
要是你還不懂,那么說明你知識不牢,思考不夠。
二、非循環(huán)隊列:
該種隊列元素占用一組連續(xù)的內存單元,所以我們可以定義隊列的結構體,下圖:
定義隊列結構體
我們定義的結構體里面包含一個基址,一個頭指針,一個尾指針,當然你完全可以使用數(shù)組,而不用指針,這里我們就使用指針吧,至于隊列的初始化,我們看下圖:
示意圖
第一個長條代表內存,我們可以先定一個長度,然后讓頭尾指針都等于基址,這樣就初始化了,下面看一下初始化函數(shù):
初始化函數(shù)
短短幾行代碼,簡單吧!
下面就該添加數(shù)據(jù)元素了,基址不變,每添加一個元素,尾指針增加1,最后還要檢查是否到達最大長度,暫且不管頭指針,下面我們看看相關函數(shù):
添加元素函數(shù)
我沒啥可說的了,太簡潔(單)了,下面在看一下刪除并讀取數(shù)據(jù)元素的代碼:
小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!
讀取元素函數(shù)
首先判斷是否為空,如為空返回0,然后檢測是否到達最大容量,我們這里選擇釋放這片內存空間,然后檢測一般情況下是否讀取完畢,最后把數(shù)據(jù)元素賦給e。上面有一個問題,為啥我們沒有向棧那樣空間不夠再重新申請,當然你可以這樣,不過不太好,下面被用完的空間完全可以再用,何必那樣呢,下面循環(huán)隊列就可以解決這種問題。
其實這些很簡單,只要你線性表了解很透徹,實現(xiàn)這些根本不在話下,手到擒來,后面繼續(xù)介紹一下循環(huán)隊列,我們會繼續(xù)由淺入深介紹數(shù)據(jù)結構等知識,可能我表達能力不太好,初學者有可能有些地方不懂,但是我會盡力。


