#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define OVERFLOW -1
#define TRUE 1
#define FALSE 0
#define ERROR 0
typedef int QElemType;
typedef int Status;
typedef struct QNode
{
QElemType data;
QNode *next;
}*QueuePtr;
struct LinkQueue
{
QueuePtr front, rear;
};
Status InitQueue(LinkQueue &Q)
{
if (!(Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode))))
exit(OVERFLOW);
Q.front -> next = NULL;
return OK;
};
Status DestoryQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = NULL;
Q.front = Q.rear;
}
return OK;
}
Status ClearQueue(LinkQueue &Q)
{
QueuePtr q,p;
Q.rear = Q.front;
p = Q.front->next;
Q.front->next = NULL;
while(p)
{
q = p->next;
free(p);
p = q;
}
return OK;
}
Status QueueEmpty(LinkQueue Q)
{
if (Q.front->next == NULL)
return TRUE;
else
return FALSE;
}
Status QueueLength(LinkQueue Q)
{
int i = 0;
QueuePtr p;
p = Q.front->next;
while(p)
{
++i;
p = p->next;
}
return i;
}
Status GetHead(LinkQueue Q,QElemType &e)
{
QueuePtr p;
if(Q.front == Q.rear)
return ERROR;
p = Q.front->next;
e = p->data;
return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p) return OVERFLOW;
p->data = e;
Q.rear->next = p;
Q.rear = p;
p->next = NULL;
return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(Q.front == Q.rear)
return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
free(p);
return OK;
}
Status QueueTraverse(LinkQueue Q,void(*visit)(QElemType))
{
QueuePtr q;
q = Q.front->next;
while(q)
{
visit(q->data);
q = q->next;
}
printf("\n");
return OK;
}
void visit(QElemType e)
{
printf("%d ",e);
}
int main()
{
int i;
QElemType e;
LinkQueue q;
i = InitQueue(q);
if(i)
printf("Create empty queue successfully!\n");
printf("Is it empty? %d(1:Yes 0:NO)\n",QueueEmpty(q));
printf("The length of queue is %d\n",QueueLength(q));
EnQueue(q,-5);
EnQueue(q,5);
EnQueue(q,10);
printf("After insert three element(-5,5,10),the length of queue is %d.\n",QueueLength(q));
printf("Is it empty? %d.(1:YES 0:NO)\n",QueueEmpty(q));
printf("The element of queue are\n");
QueueTraverse(q,visit);
i = GetHead(q,e);
if(i == OK)
printf("the head element is %d\n",e);
ClearQueue(q);
printf("After clear queue,q.front=%#p q.rear=%#p q.front->next=%u\n",q.front,q.rear,q.front->next);
DestoryQueue(q);
printf("After destory queue,q.front=%#p q.rear=%#p\n",q.front,q.rear);
return 0;
}
链式队列操作,初始化,入队,出队
最新推荐文章于 2023-08-18 09:20:17 发布