队列
一.队列的顺序存储结构及其基本运算的实现
1.顺序队中实现队列的基本运算
(1).初始化队列
void InitQueue(SqQueue *&q) { q = (SqQueue *)malloc(sizeof(SqQueue)); q->front = q->rear = -1; }
(2).销毁队列
void DestroyQueue(SqQueue *&q) { free(q); }
(3).判空
bool QueueEmpty(SqQueue *q) { return(q->front == q->rear); }
(4).进队列
bool enQueue(SqQueue *&q,Elemtype e) { if(q->rear == MaxSize-1) //队满上溢出 return false; q->rear++; //队尾增1 q->data[q->rear] = e; //rear位置插入元素e return true; }
(5).出队列
bool deQueue(SqQueue *&q,ElemType &e) { if(q->front == q->rear) //队空下溢出 return false; q->front++; e = q->data[q->front]; return true; }
2.环形队中实现队列的基本运算
(1).初始化队列
void InitQueue(SqQueue *&q) { q = (SqQueue *)malloc(sizeof(SqQueue)); q->front = q->rear = 0; }
(2).销毁队列
void DestroyQueue(SqQueue *&q) { free(q); }
(3).判空
bool QueueEmpty(SqQueue *q) { return(q->front == q->rear); }
(4).进队列
bool enQueue(SqQueue *&q,ElemType e) { if((q->rear+1)%MaxSize == q->front) //队满上溢出 return false; q->rear = (q->rear+1)%MaxSize; q->data[q->rear] = e; return true; }
(5).出队列
bool deQueue(SqQueue *&q,ElemType &e) { if(q->front == q->rear) //队空下溢出 return false; q->front = (q->front+1)%MaxSize; e = q->data[q->front]; return true; }
二.队列的链式存储结构及其基本运算的实现
(1).初始化队列
void InitQueue(SqQueue *&q) { q = (LinkQuNode *)malloc(sizeof(LinkQuNode)); q->front = q->rear = NULL; }
(2).销毁队列
void DestroyQueue(LinkQuNode *&q) { DataNode *pre=q->front,*p; //pre指向队首结点 if(pre != NULL) { p = pre->next; while(p != NULL) { free(pre); pre = p; p = p->next; } free(pre); } free(q); }
(3).判空
bool QueueEmpty(LinkQuNode *q) { return(q->rear == NULL); }
(4).进队列
void enQueue(LinkQuNode *&q,ElemType e) { DataNode *p; p = (DataNode *)malloc(sizeof(DataNode)); p->data = e; p->next = NULL; if(q->rear == NULL) //若链队为空,则新结点既是队首结点又是队尾结点 q->front = q->rear = p; else { q->rear->next = p; q->rear = p; } }
(5).出队列
bool deQueue(LinkQuNode *&q,ElemType &e) { DataNode *t; if(q->rear == NULL) //原来队列为空 return false; t = q->front; //t指向首结点 if(q->front == q->rear) //原来队列中只有一个数据结点时 q->front = q->rear = NULL; else q->front = q->front->next; e = t->data; free(t); return true; }