隊列c語言,數組實現隊列c語言

本文目錄一覽:

二級c語言,隊列、循環隊列是什麼?

隊列是一種特殊的線性表,循環隊列是將向量空間想象為一個首尾相接的圓環。

1、隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。

2、循環隊列是將向量空間想象為一個首尾相接的圓環,並稱這種向量為循環向量。存儲在其中的隊列稱為循環隊列。 在順序隊列中,當隊尾指針已經到數組的上界,不能再有入隊操作,但其實數組中還有空位置,這就叫做“假溢出”,解決假溢出的途徑—-採用循環隊列。

擴展資料

判斷隊列滿的情況:

1、count來計數;通常使用count

Count等於隊列的MAXSIZE

2、Flag標誌 int

入隊列 flag=1 出隊列flag=0

Front=rearflag==0

3、把一個存儲單元空出來,不存放數據

Rear+1==front

注意事項:(不要) 順序結構,SeqQueue myQueue;

參考資料來源:百度百科—循環隊列

用C語言編寫隊列程序

#includestdio.h

#includestdlib.h

#includemalloc.h

#define TRUE 1

#define FALSE 0

#define NULL 0

#define OK 1

#define OVERFLOW 0

#define ERROR 0

typedef int QElemType;

typedef int Status;

typedef struct QNode

{

QElemType data;

QNode *next;

}*QueuePtr;

struct LinkQueue

{

QueuePtr front,rear;//隊頭,隊尾指針

};

//函數列表

void InitQueue(LinkQueue Q)

{//初始化一個隊列

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front)//生成頭結點失敗

exit(OVERFLOW);

Q.front-next=NULL;

}

void DestoryQueue(LinkQueue Q)

{ //銷毀隊列

while(Q.front)

{

Q.rear=Q.front-next;//Q.rear指向Q.front的下一個結點

free(Q.front);//釋放Q.front所指結點

Q.front=Q.rear;//Q.front指向Q.front的下一個結點

}

}

void ClearQueue(LinkQueue Q)

{ //將隊列清為空

DestoryQueue(Q);//銷毀隊列

InitQueue(Q);//重新構造隊列

}

Status QueueEmpty(LinkQueue Q)

{ //判斷隊列是否為空

if(Q.front-next==NULL)

return TRUE;

else return FALSE;

}

int QueueLength(LinkQueue Q)

{ //求隊列的長度

int i=0;//計數器清0

QueuePtr p=Q.front;//p指向結點

while(Q.rear!=p)//p所指向的不是尾結點

{

i++;//計數器加1

p=p-next;

}

return i;

}

Status GetHead(LinkQueue Q,QElemType e)

{ //若隊列不空,則用e返回隊頭元素

QueuePtr p;

if(Q.front==Q.rear) return ERROR;

p=Q.front-next;//p指向隊頭結點

e=p-data;//將隊頭元素的值賦給e

return OK;

}

void EnQueue(LinkQueue Q,QElemType e)

{ //插入元素e為隊列Q的新的隊尾元素

QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));

//動態生成新結點

if(!p)

exit(OVERFLOW);

p-data=e;//將e的值賦給新結點

p-next=NULL;//新結點的指針為空

Q.rear-next=p;//原隊尾結點的指針域為指向新結點

Q.rear=p;//尾指針指向新結點

}

Status DeQueue(LinkQueue Q,QElemType e)

{ //若隊列不為空,刪除Q的隊頭元素,用e返回其值

QueuePtr p;

if(Q.front==Q.rear)//隊列為空

return ERROR;

p=Q.front-next;//p指向隊頭結點

e=p-data;//隊頭元素賦給e

Q.front-next=p-next;//頭結點指向下一個結點

if(Q.rear==p)//如果刪除的隊尾結點

Q.rear=Q.front;//修改隊尾指針指向頭結點

free(p);

return OK;

}

void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))

{ //對隊頭到隊尾依次對隊列中每個元素調用函數visit()

QueuePtr p;

p=Q.front-next;

while(p)

{

visit(p-data);//對p所指元素調用visit()

p=p-next;

}

printf(“\n”);

}

void print(QElemType e)

{

printf(“%2d”,e);

}

void main()

{

int i,k;

QElemType d;

LinkQueue q;

InitQueue(q);//構造一個空棧

for(i=1;i=5;i++)

{

EnQueue(q,i);

}

printf(“棧的元素為:”);

QueueTraverse(q,print);

k=QueueEmpty(q);

printf(“判斷棧是否為空,k=%d(1:為空9;0:不為空)\n”,k);

printf(“將隊頭元素賦給d\n”);

k=GetHead(q,d);

printf(“隊頭元素為d=%d\n”,d);

printf(“刪除隊頭元素:\n”);

DeQueue(q,d);

k=GetHead(q,d);

printf(“刪除後新的隊頭元素為d=%d\n”,d);

printf(“此時隊列的長度為%d\n”,QueueLength(q));

ClearQueue(q);//清空隊列

printf(“清空隊列後q.front=%u,q.rear=%u,q.front-next=%u\n”,q.front,q.rear,q.front-next);

DestoryQueue(q);

printf(“銷毀隊列後,q.front=%u,q.rear=%u\n”,q.front,q.rear);

c語言隊列操作

pq-rear-next

=

pnew這個代碼從隊列的尾部增加新節點,

然後pq-rear

=

pnew更新隊列尾部指針。隊列的數據結構形式就是由一個頭front指針,一個尾rear指針來表徵,items的設計是用空間換時間,涉及隊列大小的操作會非常方便。

隊列的特徵是先進先出,你給出的鏈式實現,其實就跟一個鏈表一樣,鏈表的添加刪除如果能理解了,隊列只是鏈表的元素增加/刪除

按先進先出特點的一種實現。

但對於隊列來說,實現方式不是重點,先進先出的性質才是重點,這在實際應用中很多,比如排隊叫號。

C語言中,隊列是什麼意思,有什麼用途

隊列是一種特殊的線性表。

隊列一種可以實現“先進先出”的存儲結構,即“一端入,一端出”,隊首(front)出隊,隊尾(rear)入隊,若front指向隊首,則rear指向隊尾最後一個有效元素的下一個元素;若rear指向隊尾,則front指向隊首第一個有效元素的下一個元素。

隊列特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

擴展資料

循環隊列各個參數的含義

1、隊列初始化front和rear的值都是零,初始化時隊列就是空的。

2、隊列非空front代表隊列的第一個元素rear代表了最後一個有效元素的下一個元素。

3、隊列空front和rear的值相等,但是不一定是零。

參考資料來源:百度百科—隊列

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/198181.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-04 07:30
下一篇 2024-12-04 07:30

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • RabbitMQ和Yii2的消息隊列應用

    本文將探討RabbitMQ和Yii2之間的消息隊列應用。從概念、安裝和配置、使用實例等多個方面詳細講解,幫助讀者了解和掌握RabbitMQ和Yii2的消息隊列應用。 一、Rabbi…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29

發表回復

登錄後才能評論