#includestdio.h

創(chuàng)新互聯(lián)主營南雄網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),南雄h5小程序定制開發(fā)搭建,南雄網(wǎng)站營銷推廣歡迎南雄等地區(qū)企業(yè)咨詢
#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;//隊頭,隊尾指針
};
//函數(shù)列表
void InitQueue(LinkQueue Q)
{//初始化一個隊列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)//生成頭結(jié)點失敗
exit(OVERFLOW);
Q.front-next=NULL;
}
void DestoryQueue(LinkQueue Q)
{ //銷毀隊列
while(Q.front)
{
Q.rear=Q.front-next;//Q.rear指向Q.front的下一個結(jié)點
free(Q.front);//釋放Q.front所指結(jié)點
Q.front=Q.rear;//Q.front指向Q.front的下一個結(jié)點
}
}
void ClearQueue(LinkQueue Q)
{ //將隊列清為空
DestoryQueue(Q);//銷毀隊列
InitQueue(Q);//重新構(gòu)造隊列
}
Status QueueEmpty(LinkQueue Q)
{ //判斷隊列是否為空
if(Q.front-next==NULL)
return TRUE;
else return FALSE;
}
int QueueLength(LinkQueue Q)
{ //求隊列的長度
int i=0;//計數(shù)器清0
QueuePtr p=Q.front;//p指向結(jié)點
while(Q.rear!=p)//p所指向的不是尾結(jié)點
{
i++;//計數(shù)器加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指向隊頭結(jié)點
e=p-data;//將隊頭元素的值賦給e
return OK;
}
void EnQueue(LinkQueue Q,QElemType e)
{ //插入元素e為隊列Q的新的隊尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
//動態(tài)生成新結(jié)點
if(!p)
exit(OVERFLOW);
p-data=e;//將e的值賦給新結(jié)點
p-next=NULL;//新結(jié)點的指針為空
Q.rear-next=p;//原隊尾結(jié)點的指針域為指向新結(jié)點
Q.rear=p;//尾指針指向新結(jié)點
}
Status DeQueue(LinkQueue Q,QElemType e)
{ //若隊列不為空,刪除Q的隊頭元素,用e返回其值
QueuePtr p;
if(Q.front==Q.rear)//隊列為空
return ERROR;
p=Q.front-next;//p指向隊頭結(jié)點
e=p-data;//隊頭元素賦給e
Q.front-next=p-next;//頭結(jié)點指向下一個結(jié)點
if(Q.rear==p)//如果刪除的隊尾結(jié)點
Q.rear=Q.front;//修改隊尾指針指向頭結(jié)點
free(p);
return OK;
}
void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))
{ //對隊頭到隊尾依次對隊列中每個元素調(diào)用函數(shù)visit()
QueuePtr p;
p=Q.front-next;
while(p)
{
visit(p-data);//對p所指元素調(diào)用visit()
p=p-next;
}
printf("\n");
}
void print(QElemType e)
{
printf("%2d",e);
}
void main()
{
int i,k;
QElemType d;
LinkQueue q;
InitQueue(q);//構(gòu)造一個空棧
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);
當(dāng)然可以,定義成全局變量或者在定義的那個函數(shù)返回此隊列把此返回的隊列作為實參傳遞給另一個函數(shù)
q.push(m); // queue是C++STL模板庫的東西,需要使用push來插入元素,詳細信息你可以參考MSDN來了解其使用及內(nèi)容。
pq-rear-next
=
pnew這個代碼從隊列的尾部增加新節(jié)點,
然后pq-rear
=
pnew更新隊列尾部指針。隊列的數(shù)據(jù)結(jié)構(gòu)形式就是由一個頭front指針,一個尾rear指針來表征,items的設(shè)計是用空間換時間,涉及隊列大小的操作會非常方便。
隊列的特征是先進先出,你給出的鏈?zhǔn)綄崿F(xiàn),其實就跟一個鏈表一樣,鏈表的添加刪除如果能理解了,隊列只是鏈表的元素增加/刪除
按先進先出特點的一種實現(xiàn)。
但對于隊列來說,實現(xiàn)方式不是重點,先進先出的性質(zhì)才是重點,這在實際應(yīng)用中很多,比如排隊叫號。
//定義隊列結(jié)構(gòu)體
typedef struct Qnode
{
int data;
struct Qnode *next;
} Queue , *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} linkQnode;
//創(chuàng)建一個隊列
initQueue (linkQnode *q)
{
q - front = q - rear = (QueuePtr) malloc (sizeof (Queue));
if (!q - front) exit (0);
q - front - next = NULL;
}
//入隊列
EnterQueue (linkQnode *q , int item)
{
QueuePtr p;
p = (QueuePtr) malloc (sizeof (Queue));
if (!p) exit (0);
p - data = item;
p - next = NULL;
q - rear - next = p;
q - rear = p;
}
//出隊列
DelQueue (linkQnode *q , int *item)
{
QueuePtr p;
if (q - front = q - rear) return;
p = q - front - next;
*item = p - data;
q - front - next = p - next;
if (q - rear == p)
q - rear = q - front;
free (p);
}
新聞標(biāo)題:c語言函數(shù)隊列 C語言 隊列
轉(zhuǎn)載源于:http://chinadenli.net/article24/hejcce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、服務(wù)器托管、定制開發(fā)、App開發(fā)、小程序開發(fā)、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)