如圖所示:
根據圖可以知道:
空的判斷條件: front 與 rear 都指向頭結點
實現**如下:
struct node;
struct queuerecord;
typedef struct node * ptrtonode;
typedef struct queuerecord * queue;
struct node
;struct queuerecord
;queue createqueue( );
void disposequeue( queue q );
int isempty( queue q );
void makeempty( queue q );
void enqueue( elementtype x, queue q );
void dequeue( queue q );
elementtype front( queue q );
elementtype frontanddequeue( queue q );
queue createqueue()
// 鍊錶棧中含有頭結點
q->front = q->rear = ( ptrtonode ) malloc( sizeof( struct queuerecord ) );
if ( q->front == null )
q->front->next = null;
return q;
}void disposequeue( queue q )
void enqueue( elementtype x, queue q )
else }
void dequeue( queue q )
else }
int isempty( queue q )
void makeempty( queue q )
while ( !isempty(q) )
dequeue( q );
}elementtype front( queue q )
else
return q->front->next->element;
}elementtype frontanddequeue( queue q )
else
}
對於迴圈陣列實現一般存在兩種判斷佇列空與滿的方法;
一種在表示佇列的結構體中設定乙個變數size,指示佇列中的元素個數;另一種依靠基準情形來判斷,即通過 rear 與 front 的關係;
1.設定變數size來判斷
rear:指向佇列中的最後乙個元素,先移動再插入元素
front:指向佇列中第乙個元素
空的判斷: size = 0
滿的判斷: size = capacity
初始化:
front = 1;
rear = 0;
**如下:
struct queuerecord;
typedef queuerecord *queue;
queue createqueue( int maxelements );
void disposequeue( queue q );
int isempty( queue q );
int isfull( queue q );
void makeempty( queue q );
void enqueue( elementtype x, queue q );
void dequeue( queue q );
elementtype front( queue q );
elementtype frontanddequeue( queue q );
struct queuerecord
;queue createqueue( int maxelements )
q->array = (elementtype *) malloc( sizeof(elementtype) * maxelements );
if ( q->array == null )
q->capacity = maxelements;
makeempty( q );
return q;
}void disposequeue( queue q )
}int isempty( queue q )
int isfull( queue q )
void makeempty( queue q )
static int succ( int value, queue q )
void enqueue( elementtype x, queue q )
else }
void dequeue( queue q )
else }
elementtype front( queue q )
else
return q->array[q->front];
}elementtype frontanddequeue( queue q )
else
return tmpcell;
}
2.以基準情況判斷方法
rear:指向佇列最後乙個元素的下乙個元素,先插入元素,再移動
front:指向佇列的第乙個元素
空的判斷: rear = front
滿的判斷: 在迴圈陣列中, front - 1 = rear
初始化: front = rear = 0
注意:假設實現陣列的大小為a.size,使用這種判斷方法只能儲存a.size - 1個元素
**如下:
struct queuerecord;
typedef queuerecord *queue;
queue createqueue( int maxelements );
void disposequeue( queue q );
int isempty( queue q );
int isfull( queue q );
void makeempty( queue q );
void enqueue( elementtype x, queue q );
void dequeue( queue q );
elementtype front( queue q );
elementtype frontanddequeue( queue q );
struct queuerecord
;queue createqueue( int maxelements )
q->array = (elementtype *) malloc( sizeof(elementtype) * maxelements );
if ( q->array == null )
q->capacity = maxelements;
makeempty( q );
return q;
}void disposequeue( queue q )
}int isempty( queue q )
int isfull( queue q )
void makeempty( queue q )
void enqueue( elementtype x, queue q )
else }
void dequeue( queue q )
else
q->front = ( q->front + 1 ) % q->capacity;
}elementtype front( queue q )
else
return q->array[q->front];
}elementtype frontanddequeue( queue q )
else
return tmpcell;
}
佇列的陣列實現與鍊錶實現
佇列是一種基本的資料結構。我們平時排隊等候服務的時候,是先到的人先接受服務。對於佇列這種資料結構,實現的就是一種先進先出 first int,first out,fifo 的策略。改變佇列中元素的操作方法只有兩個 push與pop。push是把元素從隊尾插入,pop是把元素從隊頭刪除。佇列的陣列實現...
資料結構 佇列,陣列實現 鍊錶實現和迴圈佇列
一 什麼是佇列 一種先進先出的資料結構 fifo結構 新元素新增在隊尾 push 刪除操作刪掉第乙個元素 pop 二 佇列的實現方式 佇列的實現方式陣列實現 鍊錶實現 三 常見的佇列 常用佇列迴圈佇列 阻塞佇列 併發佇列 四 怎麼實現乙個無bug的佇列思考 思考1 head 頭元素 和tail 尾元...
佇列(陣列實現和鍊錶實現)
1.概念 具有一定操作約束的線性表 2.特點 1 只能在一端插入 入隊 另一端刪除 出隊 2 先進先出。3.儲存實現方式 陣列 鍊錶。4.基本操作 1.陣列實現 迴圈陣列 注意 1 普通的順序儲存的陣列用來實現佇列時,存在乙個問題 當rear 記錄隊尾的變數 到達maxsize 1時,不能確定佇列是...