void InitQueue(LiQueue *q)
創(chuàng)新互聯(lián)建站長(zhǎng)期為上1000+客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏(yíng)平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為柳江企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),柳江網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
{q=(LiQueue *)malloc(sizeof(LiQueue));
q-front=q-rear-NULL;} //初始化
int QueueEmpty(LiQueue *q)
{if(q-rear==NULL)
return 1;
else
return 0;} //判空
void enQueue( LiQueue *q,ElemType e)
{QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s-data=e;
s-next=NULL;
if(q-rear==NULL)
q-front=q-rear=s;
else
{q-rear-next=s;
q-rear=s;
}} //入隊(duì)
int deQueue( LiQueue *q,ElemType e)
{QNode *t;
if(q-rear==NULL)
return 0;
t=q-front;
if(q-front==q-rear)
q-front=q-rear=NULL;
else
q-front=q-front-next;
e=t-data;
free(t);
return 1;} //出隊(duì)
int deQueue( LiQueue *q,ElemType e)
{QNode *t;
if(q-rear==NULL)
return 0;
t=q-front;
if(q-front==q-rear)
q-front=q-rear=NULL;
else
q-front=q-front-next;
e=t-data;break;
free(t);
return 1;} //取隊(duì)頭
輸出隊(duì)列所有數(shù)就是出隊(duì)
ont)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱(chēng)為隊(duì)尾,進(jìn)行刪除操作的端稱(chēng)為隊(duì)頭。隊(duì)列中沒(méi)有元素時(shí),稱(chēng)為空隊(duì)列。 在隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)中,最先插入在元素將是最先被刪除;反之最后插入的元素將最后被刪除,因此隊(duì)列又稱(chēng)為“先進(jìn)先出”(FIFO—first in first out)的線(xiàn)性表。 隊(duì)列空的條件:front=rear 隊(duì)列滿(mǎn)的條件: rear = MAXSIZE 隊(duì)列可以用數(shù)組Q[1…m]來(lái)存儲(chǔ),數(shù)組的上界m即是隊(duì)列所容許的最大容量。在隊(duì)列的運(yùn)算中需設(shè)兩個(gè)指針:head,隊(duì)頭指針,指向?qū)嶋H隊(duì)頭元素的前一個(gè)位置;tail,隊(duì)尾指針,指向?qū)嶋H隊(duì)尾元素所在的位置。一般情況下,兩個(gè)指針的初值設(shè)為0,這時(shí)隊(duì)列為空,沒(méi)有元素。圖1 ( a)畫(huà)出了一個(gè)由6個(gè)元素構(gòu)成的隊(duì)列,數(shù)組定義Q[1…10]。Q(i) i=3,4,5,6,7,8頭指針head=2,尾指針tail=8。隊(duì)列中擁有的元素個(gè)數(shù)為:L=tail-head現(xiàn)要讓排頭的元素出隊(duì),則需將頭指針加1。即head=head+1這時(shí)頭指針向上移動(dòng)一個(gè)位置,指向Q(3),表示Q(3)已出隊(duì)。見(jiàn)圖1 (b)。如果想讓一個(gè)新元素入隊(duì),則需尾指針向上移動(dòng)一個(gè)位置。即tail=tail+1這時(shí)Q(9)入隊(duì),見(jiàn)圖1 (c)。當(dāng)隊(duì)尾已經(jīng)處理在最上面時(shí),即tail=10,如果還要執(zhí)行入隊(duì)操作,則要發(fā)生"上溢",但實(shí)際上隊(duì)列中還有三個(gè)空位置,所以這種溢出稱(chēng)為"假溢出"。 克服假溢出的方法有兩種。一種是將隊(duì)列中的所有元素均向低地址區(qū)移動(dòng),顯然這種方法是很浪費(fèi)時(shí)間的;另一種方法是將數(shù)組存儲(chǔ)區(qū)看成是一個(gè)首尾相接的環(huán)形區(qū)域。當(dāng)存放到n地址后,下一個(gè)地址就"翻轉(zhuǎn)"為1。在結(jié)構(gòu)上采用這種技巧來(lái)存儲(chǔ)的隊(duì)列稱(chēng)為循環(huán)隊(duì)列。 隊(duì)列和棧一樣只允許在斷點(diǎn)處插入和刪除元素。 循環(huán)隊(duì)的入隊(duì)算法如下: 1、tail=tail+1; 2、若tail=n+1,則tail=1; 3、若head=tail尾指針與頭指針重合了,表示元素已裝滿(mǎn)隊(duì)列,則作上溢出錯(cuò)處理; 4、否則,Q(tail)=X,結(jié)束(X為新入出元素)。 隊(duì)列和棧一樣,有著非常廣泛的應(yīng)用。
具體網(wǎng)上查:
另外,虛機(jī)團(tuán)上產(chǎn)品團(tuán)購(gòu),超級(jí)便宜
struct?pQueue
{
ElemType?*head;//指向開(kāi)辟的空間的首地址
Elemtype?*tail;
int?length;//(總?cè)萘?
int?L_now;//(當(dāng)前容量)
};
if(pQueue.L_now==pQueue.length)
{
每次申請(qǐng)空間都是+N
}
pQueue-tail=p;
//定義隊(duì)列結(jié)構(gòu)體
typedef struct Qnode
{
int data;
struct Qnode *next;
} Queue , *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} linkQnode;
//創(chuàng)建一個(gè)隊(duì)列
initQueue (linkQnode *q)
{
q - front = q - rear = (QueuePtr) malloc (sizeof (Queue));
if (!q - front) exit (0);
q - front - next = NULL;
}
//入隊(duì)列
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;
}
//出隊(duì)列
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);
}