代码实现:
#include <stdio.h>
#include <stdlib.h>typedef int DataType;
typedef struct qnode
{
DataType data;
struct qnode *next;
}LQNode;
typedef struct
{
LQNode *front;
LQNode *rear;
}LQueue;
void QueueInitiate(LQueue *Q)
{
Q->front = NULL;
Q->rear = NULL;
}
int QueueNotEmpty(LQueue *Q)
{
if(Q->front == NULL)
{
return 0;
}
return 1;
}
int QueueAppend(LQueue *Q, DataType x)
{
LQNode *p;
if((p = (LQNode *)malloc(sizeof(LQNode))) == NULL)
{
printf("内存空间不足!");
return 0;
}
p->data = x;
p->next = NULL;
if(Q->rear != NULL)
{
Q->rear->next = p;
}
Q->rear = p;
if(Q->front == NULL)
{
Q->front = p;
}
return 1;
}
int QueueDelete(LQueue *Q, DataType *d)
{
LQNode *p;
if(Q->front == NULL)
{
printf("队列空,无数据元素出队列!\n");
}
else
{
*d = Q->front->data;
p = Q->front;
Q->front = Q->front->next;
if(Q->front == NULL)
{
Q->rear = NULL;
}
free(p);
}
return 1;
}
int QueueGet(LQueue *Q, DataType *d)
{
if(Q->front == NULL)
{
printf("队列已空无数据元素出队列!");
return 0;
}
else
{
*d = Q->front->data;
return 1;
}
}
void Destroy(LQueue Q)
{
LQNode *p, *p1;
p = Q->front;
while(p!=NULL)
{
p1 = p;
p = p->next;
free(p1);
}
}
int main()
{
LQueue *queue;
queue = (LQueue *)malloc(sizeof(LQueue));
QueueInitiate(queue);
QueueAppend(queue, 1);
QueueAppend(queue, 2);
QueueAppend(queue, 3);
DataType *d1, *d2;
d1 = (DataType *)malloc(sizeof(DataType));
d2 = (DataType *)malloc(sizeof(DataType));
QueueGet(queue, d1);
printf("第一次取出的队列头元素是:%d\n",*d1);
QueueDelete(queue, d2);
printf("第一次删除的队列头元素是:%d\n",*d2);
QueueGet(queue, d1);
printf("第二次取出的队列头元素是:%d\n",*d1);
QueueDelete(queue, d2);
printf("第二次删除的队列头元素是:%d\n", *d2);
QueueGet(queue, d1);
printf("第三次取出的队列头元素是:%d\n",*d1);
QueueDelete(queue, d2);
printf("第三次删除的队列头元素是:%d\n", *d2);
Destroy(*queue);
getchar();
return 0;
}