キュー(Queue)——(3)ダイナミックチェーン実装補完(先頭ノードバージョンなし)
2209 ワード
先頭ノードを持たない個人的な感覚は先頭ノードより理解しにくいので、先頭ノードも使いやすいので、先頭ノードのバージョンはここをクリックしてください.ここでは実装コードだけを貼ります.(C++)
myqueue.h
myqueue.cpp
main関数
myqueue.h
//
typedef struct _QNode
{
char _data;
struct _QNode * _next;
}QNode;
typedef struct _Queue
{
QNode *_front;
QNode *_rear;
}Queue;
void initQueue(Queue * pq);
bool isQueueEmpty(Queue * pq);
void enQueue(Queue * pq,char data);
char deQueue(Queue * pq);
void clearQueue(Queue * pq);
myqueue.cpp
#include "myqueue.h"
#include
#include
//
void initQueue(Queue * pq)
{
pq->_front = pq->_rear = NULL;
}
bool isQueueEmpty(Queue * pq)
{
if(pq->_front == pq->_rear && pq->_front == NULL)
return 1;
else
return 0;
}
void enQueue(Queue * pq,char data)
{
if(isQueueEmpty(pq)) {
pq->_front = (QNode*)malloc(sizeof(QNode));
pq->_front->_data = data;
pq->_rear = pq->_front;
pq->_rear->_next = NULL;
}
else{
QNode *cur = (QNode*)malloc(sizeof(QNode));
cur->_data = data;
cur->_next = NULL;
pq->_rear->_next = cur;
pq->_rear = cur;
}
}
char deQueue(Queue * pq)
{
char data;
if(pq->_front == pq->_rear){
data = pq->_front->_data;
free(pq->_front);
pq->_rear = pq->_front = NULL;
}
else
{
data = pq->_front->_data;
QNode *t = pq->_front;
pq->_front = pq->_front->_next;
free(t);
}
return data;
}
void clearQueue(Queue * pq)
{
if(isQueueEmpty(pq))
return ;
QNode *t;
while(pq->_front)
{
t = pq->_front;
pq->_front = pq->_front->_next;
free(t);
}
}
main関数
#include
#include"myqueue.h"
using namespace std;
int main()
{
Queue q;
initQueue(&q);
for(char ch='A';ch<='Z';ch++)
enQueue(&q,ch);
while(!isQueueEmpty(&q))
printf("%c ",deQueue(&q));
return 0;
}