資料結構(三)順序佇列,鏈式佇列與迴圈佇列

2021-08-22 13:46:04 字數 2306 閱讀 3555

順序佇列,就是陣列,不多贅述

鏈式佇列就是用鍊錶來實現佇列,像鍊錶一樣,在頭部增加頭部指標指向頭結點,在尾部增加尾部指標指向隊尾節點。

**如下:

/*

鏈式佇列,也就是用鍊錶實現的對列,用指標指向頭結點做front,尾部也來乙個指標指向rear,而當front和rear相等時,隊列為空

*/#include #include typedef struct linkqueue//節點

myqueue;

typedef struct//存放頭和尾指標,能夠找到這兩

pqueue;

//初始化

void init(pqueue *q)

q->rear = q->front;//rear只用到指標作用,無需分配記憶體

q->rear->next = null;

}//入隊

void enqueue(pqueue *q, int x)

pnew->data = x;

pnew->next = null;

q->rear->next = pnew;//將pnew連線到末尾

q->rear = pnew;//將尾指標指向新插入的尾結點

}//出隊

void outqueue(pqueue *q)

myqueue *p = q->front->next;//指向第乙個節點

q->front->next = p->next;

if(q->rear == p)//如果只有乙個元素

free(p);

p = null; }

//遍歷

void display(pqueue *q)

myqueue *p = q->front->next;

while(p != q->rear->next) }

int main()

//printf("出對乙個\n");

//outqueue(p);

display(p);

enqueue(p,7);

printf("入乙個7\n");

display(p);

printf("出對5次\n");

for(i = 1;i < 6; i++)

display(p);

printf("入隊5個元素\n");

for(i = 1;i < 6; i++)//入隊5個元素

display(p);

printf("出兩個\n");

outqueue(p);

outqueue(p);

display(p);*/

delete(p);

p = null;

return 0;

}

迴圈佇列:

說到迴圈佇列,先說順序佇列,

在順序佇列中,front作為佇列頭部下標,rear作為佇列尾部下標,當隊列為空時,front == rear。當有元素入隊,放入rear下標元素中,然後rear後移一位,入隊就按照這個規程往後。這樣很方便但會產生乙個假溢位的問題,如下圖:

如圖所見,front前面還有空位,但rear已經溢位,明明還有多餘位置,但系統已經判斷溢位,造成很大浪費。

那怎麼解決?迴圈佇列:

**如下:

#define max 5

typedef struct queue

myqueue;

//初始化

void init(myqueue *q)

//入隊

void enqueue(myqueue *q,int x)

q->data[q->rear] = x;

q->rear = (q->rear + 1)%max;

//printf("%d入隊\n",x);

}//出隊

void outqueue(myqueue *q)

q->front = (q->front + 1)%max;

}//遍歷

void display(myqueue *q)

}//佇列長度

int getlength(myqueue *q)

資料結構 佇列實現(順序迴圈佇列 鏈式佇列)

佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...

資料結構 佇列 順序儲存結構佇列 鏈式儲存結構佇列

佇列是一種只允許在一端進行插入操作,而在另外一端進行刪除操作的線性表,特徵是先進先出,包括 順序儲存結 構佇列 鏈式儲存結構佇列。重點說明 迴圈佇列和鏈隊。在佇列中front為隊頭指標 rear為隊尾指標 佇列 佇列空的條件 rear front 佇列滿的條件 rear 1 queuesize fr...

資料結構 分別實現順序佇列和鏈式佇列

順序佇列 seqqueue.h pragma once include include define title printf n s function define seqqueuemaxsize 1000 typedef char seqqueuetype typedef struct seqq...