链队列的数据结构
typedef struct QNode{
QElemType data; //数据域
struct QNode *next; //指针域
}QNode,QueuePtr;
typedef struct LinkQueue{
QueuePtr *front; //队头指针
QueuePtr *rear; //队尾指针
}LinkQueue;
构造一个空队列
int InitQueue(LinkQueue *Queue)
{
Queue->front = (QueuePtr *)malloc(sizeof(QNode));
Queue->rear = Queue->front;
if(!Queue->front){
exit(1);
}
Queue->front->next = NULL;
Queue->front->data = '\0';
return 0;
}
销毁队列
int DestoryQueue(LinkQueue *Queue)
{
while(Queue->front){
Queue->rear = Queue->front->next;
free(Queue->front);
Queue->front = Queue->rear;
}
return 0;
}
清为空队列
void clearQueue(LinkQueue *Queue){
Queue->front = Queue->rear;
}
队列是否为空
int QueueEmpty(LinkQueue *Queue)
{
int status = 0;
if(Queue->front == Queue->rear)
{
printf("Queue is Empty\n");
status = 0;
}else{
printf("Queue isn't Empty\n");
status = 1;
}
return status;
}
返回队列长度
int QueueLength(LinkQueue *Queue)
{
QueuePtr *p = Queue->front; //指示指针
int length = 0;
while(p!=Queue->rear)
{
length++;
p = p->next;
}
return length;
}
返回队头元素
QElemType getHead(LinkQueue *Queue)
{
QElemType e = '\0';
if(Queue->front==Queue->rear){
printf("Queue is Empty\n");
}
e = Queue->front->next->data;
return e;
}
入队
int EnQueue(LinkQueue *Queue, QElemType e)
{
if(!Queue->front){
exit(1);
}
//建立新结点
QueuePtr *p = (QueuePtr *)malloc(sizeof(QNode));
if(!p){
exit(1);
}
p->data = e;
p->next = NULL;
Queue->rear->next = p;
Queue->rear = p;
return 0;
}
出队
QElemType DeQueue(LinkQueue *Queue)
{
QElemType e = '\0'; //保存返回值
QueuePtr *p;
if(Queue->front==Queue->rear){
printf("Queue is Empty\n"); return e;
}
p = Queue->front->next;
e = p->data;
Queue->front->next = p->next;
if(Queue->rear == p){ //队列中仅一个元素的情形
Queue->rear = Queue->front;
}
free(p);
return e;
}