整理过后,思路很清晰。
队列的单链表存储结构:
typedef struct node
{
int data;
struct node *next;
}queue_node, *queue;
typedef struct
{
queue front;
queue rear;
}link_queue;
熟悉每种数据结构的存储结构,实现起来才不会觉得困难。
下面是实现代码:
#include<stdio.h>
#include<malloc.h>
#define OK 0
#define ERROR -1
#define OVERFLOW 1
#define TRUE 1
#define FALSE 0
typedef struct node
{
int data;
struct node *next;
}queue_node, *queue;
typedef struct
{
queue front;
queue rear;
}link_queue;
int init_queue(link_queue *q)
{
q->rear = (queue)malloc(sizeof(queue_node));
if(!q->rear)
exit(OVERFLOW);
q->rear->next = NULL;
q->front = q->rear;
return OK;
}
int empty(link_queue q)
{
if( q.rear == q.front)
return TRUE;
else
return FALSE;
}
int enqueue(link_queue *q, int e)
{
queue p;
p = (queue)malloc(sizeof(queue_node));
if(!p)
exit(OVERFLOW);
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
return OK;
}
int dequeue(link_queue *q, int *e)
{
queue p;
if(q->rear == q->front)
return ERROR;
// *e = q->front->data;
p = q->front->next;
*e = p->next->data;
q->front->next = p->next;
if(q->rear == p)
q->rear = q->front;
free(p);
return OK;
}
int get_front(link_queue q, int *e)
{
queue p;
if(q.rear == q.front)
return ERROR;
*e = q.front->data;
return OK;
}
int destroy_queue(link_queue * q)
{
queue p;
while(q->front)
{
q->rear = q->front->next;
free(q->front);
q->front = q->rear;
}
return OK;
}
int main()
{
link_queue q;
int e1, e2;
int i;
printf("init_queue\n");
init_queue(&q);
printf("enqueue\n");
for(i = 1; i < 10; i++)
{
if (enqueue(&q, i) == OK);
printf("%3d", i);
}
printf("\n");
printf("dequeue\n");
dequeue(&q, &e1);
printf("dequeue: %d\n", e1);
printf("get_front\n");
get_front(q, &e2);
printf("get front:%d\n", e2);
if (empty(q))
printf("empty!\n");
else
printf("not empty\n");
if (destroy_queue(&q) == OK)
printf("destroyed!\n");
return 0;
}主函数设计的比较简单,但不是重点。
本文出自 “兵疯千里” 博客,请务必保留此出处http://slientradio.blog.51cto.com/7241495/1390869
原文:http://slientradio.blog.51cto.com/7241495/1390869