上一次我们简单实现了堆栈,这次让我们用C语言实现队列,也就是FIFO。不足之处请大神们指点赐教。再次先行谢过。我本人比较钟爱于链表,如果朋友有需要的话,我会补充队列的数组实现。好了,下面进入正题。
1.首先,我们定义队列的节点数据类型:
typedef int ElemType; //队列中的实际数据
//队列的节点数据类型
typedef struct _Node
{
ElemType data;
_Node* next;
}Node,*PNode;
2.队列主要有两个操作:入队和出队。下面分别实现。
(1)入队操作:
void enqueue(PQueue q,ElemType e)
{
if (NULL == q->Front)//如果队列开始时是空的
{
PNode s = (PNode)malloc(sizeof(Node));
s->data = e;
s->next = NULL;
q->Front = s;
q->Rear = s;
return;
}
//队列非空
PNode s = (PNode)malloc(sizeof(Node));
s->data = e;
q->Rear->next = s;
s->next = NULL;
q->Rear = s;
}
这样就实现了入队操作。如果有朋友不熟悉链表,我会后续补充一下。
(2)出队操作:
void dequeue(PQueue q,ElemType ret)
{
PNode tmp = NULL;
if (NULL == q->Front)//队列为空的话 直接返回。
{
printf("队列已经为空!!!\n");
return;
}
//队列不为空
tmp = q->Front; //获取对头节点
if (q->Front == q->Rear)//如果队列中只有一个节点
{
q->Front = q->Rear = NULL;
}
else //队列中由多个元素
{
q->Front = q->Front->next;
ret = tmp->data;
free(tmp);
tmp = NULL; //这一步最好加上,避免野指针
}
}
3.测试:
(1)输出队列中的元素:
void print(PQueue q)
{
PNode p = q->Front;
while (NULL != p)
{
printf("%d ",p->data);
p = p->next;
}
}
(2)main函数:
#include "Queue.h"
int main()
{
Queue q={NULL,NULL};
ElemType e;
enqueue(&q,1);
enqueue(&q,2);
enqueue(&q,3);
enqueue(&q,4);
enqueue(&q,5);
print(&q);
return 0;
}
输出:1 2 3 4 5
好了,这样,一个简单的队列就实现了。这里只是给出了队列的简单实现,大家可以根据需要去优化一下这个代码。蟹蟹各位的支持! |