C語言是面向過程的窍帝,而C++是面向對象的
C和C++的區(qū)別:
C是一個結構化語言靡砌,它的重點在于算法和數據結構牙言。C程序的設計首要考慮的是如何通過一個過程梳星,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現過程(事務)控制)。
C++异袄,首要考慮的是如何構造一個對象模型通砍,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或實現過程(事務)控制烤蜕。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣封孙。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”讽营。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣虎忌。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”橱鹏,而就語言本身而言膜蠢,在C中更多的是算法的概念堪藐。那么是不是C就不重要了,錯挑围!算法是程序設計的基礎礁竞,好的設計如果沒有好的算法,一樣不行杉辙。而且模捂,“C加上好的設計”也能寫出非常好的東西。
線性結構的兩種常見應用之二:隊列
定義:一種可以實現先進先出的存儲結構奏瞬。
分類:
鏈式隊列:以鏈表實現的隊列
靜態(tài)隊列:以數組實現的隊列枫绅。
靜態(tài)隊列通常都必須是循環(huán)隊列:
靜態(tài)隊列為什么必須是循環(huán)隊列泉孩?
小編推薦一個學C語言/C++的學習裙【 六九九硼端,四七零,五九六 】寓搬,無論你是大牛還是小白珍昨,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具句喷,很多干貨和技術資料分享镣典!
如上圖,一個隊列唾琼,從0到8共9個元素兄春,把-1放在位置0,-2放在位置1锡溯,依次赶舆。如果f(front指針)指向第一個(0),那么r(rear指針)則指向最后一個的下一個(8)祭饭,如果f指向第一個元素的前一個元素(0前芜茵,f1),那么r則指向最后一個元素(r1)倡蝙。以f指向第一個元素九串,r指向最后一個元素的后一個,如果在隊列中增加一個元素寺鸥,比如把-9放在位置8猪钮,那么r則指向8的下一個。如果是刪除隊列元素胆建,比如刪除-1烤低,則f指向-2.也就是f指針用來刪除元素,r指針用來增加元素眼坏。如果用傳統(tǒng)的數組來實現隊列拂玻,增加元素酸些,r只能往上移,刪除元素檐蚜,f也是往上移魄懂。比如刪除3個元素,則f指向-4闯第,因為f只能增市栗,那么導致-1、-2咳短、-3這3個元素占據的內存位置將無法再使用填帽。所以用傳統(tǒng)數組來實現的隊列必須是循環(huán)隊列!循環(huán)
隊列需要幾個參數來確定咙好?
需要兩個參數來確定:front篡腌,rear
循環(huán)隊列各個參數的含義 ,2個參數不同場合有不同的含義:
1)隊列初始化:front和rear的值都是零勾效;
2)隊列非空嘹悼;
front代表的是隊列的第一個元素
rear代表隊的最后一個有效元素的下一個元素
3)隊列空front和rear的值相等,但不一定是零层宫。
循環(huán)隊列入隊偽算法:兩步:
1杨伙、將入隊值存入r所指向的位置
2、將r指向下一個位置
錯誤寫法:r=r+1萌腿;
正確寫法:r=(r+1)%數組長度限匣,實現r的循環(huán)
循環(huán)對列出隊偽算法:一步:
f=(f+1)%數組長度
如何判斷循環(huán)隊列為空?如果f與r相等毁菱,則該隊列為空米死。
如何判斷循環(huán)隊列已滿:
兩個方法:
1、增加一個表示隊列內元素個數的參數鼎俘;
2哲身、隊列少用一個元素,即長度為N的隊列贸伐,只能放N-1個元素勘天,if (r+1)%數組長度 == f 則隊列滿。
隊列主要算法:
出隊
入隊
隊列的具體應用:
所有和時間有關的操作都與隊列有關
////////////////////////////////////////////////////////////////////////
///程序示例
#include
#include
#include
typedef struct Queue{
int * pBase;
int front;
int rear;
}QUEUE, * PQUEUE;
void init_queue(PQUEUE pq);
bool en_queue(PQUEUE pq,int val);
bool isFull(PQUEUE pq);
void traverse_queue(PQUEUE pq);
bool isEempty(PQUEUE pq);
bool out_queue(PQUEUE pq,int * val);
int main(void)
{
int outval;
QUEUE q;
init_queue(&q);
en_queue(&q,11);
en_queue(&q,13);
en_queue(&q,15);
en_queue(&q,17);
en_queue(&q,19);
en_queue(&q,21);
en_queue(&q,24);
traverse_queue(&q);
if(out_queue(&q,&outval))
{
小編推薦一個學C語言/C++的學習裙【 六九九捉邢,四七零脯丝,五九六 】,無論你是大牛還是小白伏伐,是想轉行還是想入行都可以來了解一起進步一起學習宠进!裙內有開發(fā)工具,很多干貨和技術資料分享藐翎!
printf("out queue success!the out value is %d ",outval);
}
else
{
printf("out queue failed! ");
}
traverse_queue(&q);
en_queue(&q,24);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
traverse_queue(&q);
out_queue(&q,&outval);
return 0;
}
void init_queue(PQUEUE pq)
{
pq->pBase = (int *)malloc(sizeof(int) * 6);
pq->front = 0;
pq->rear = 0;
}
bool isFull(PQUEUE pq)
{
if((pq->rear + 1)%6 == pq->front)
return true;
else
return false;
}
bool isEmpty(PQUEUE pq)
{
if(pq->front == pq->rear)
return true;
else
return false;
}
bool en_queue(PQUEUE pq,int val)
{
if(isFull(pq))
{
printf("隊列已滿 ");
return false;
}
else
{
pq->pBase[pq->rear] = val;
pq->rear = (pq->rear +1)%6;
return true;
}
}
bool out_queue(PQUEUE pq,int * val)
{
if(isEmpty(pq))
{
printf("the queue is empty! ");
return false;
}
* val = pq->pBase[pq->front];
pq->front = (pq->front + 1)%6;
return true;
}
void traverse_queue(PQUEUE pq)
{
int i = pq->front;
while(i != pq->rear)
{
printf("%d ",pq->pBase[i]);
i = (i + 1)%6;
}
printf(" ");
}
小編推薦一個學C語言/C++的學習裙【 六九九材蹬,四七零实幕,五九六 】,無論你是大牛還是小白堤器,是想轉行還是想入行都可以來了解一起進步一起學習昆庇!裙內有開發(fā)工具,很多干貨和技術資料分享闸溃!
////////////////////////////////////////////////////////////////////////
這些是C/C++能做的
服務器開發(fā)工程師整吆、人工智能、云計算工程師辉川、信息安全(黑客反黑客)表蝙、大數據 、數據平臺乓旗、嵌入式工程師府蛇、流媒體服務器、數據控解寸齐、圖像處理欲诺、音頻視頻開發(fā)工程師、游戲服務器渺鹦、分布式系統(tǒng)、游戲輔助等