您的位置:首页 > 编程语言 > C语言/C++

C语言 链式队列

2017-08-06 22:56 190 查看
#ifndef __LINKQUEUE_H__

#define __LINKQUEUE_H__

#include "error.h"

#define TRUE  1

#define FALSE 0

typedef int QueueData;

typedef struct _node

{
QueueData data;
struct _node *next;

}Node;

typedef struct _queue

{
Node *front;
Node *rear;

}Queue;

Queue* Create_Queue();

int QueueEmpty (Queue *Q);   

// 进队

int EnQueue (Queue *Q, QueueData x);   

// 出队

int DeQueue (Queue *Q, QueueData *x);

// 取队头

int GetFront (Queue *Q, QueueData *x);

int Destroy_Queue (Queue *Q);

#endif // __LINKQUEUE_H__

#include "LinkQueue.h"

#include <stdlib.h>

Queue* Create_Queue()

{
Queue * q = (Queue*)malloc(sizeof(Queue)/sizeof(char));
if (q == NULL)
{
errno = MALLOC_ERROR;
return NULL;
}

// 置空队
q->front = NULL;
q->rear  = NULL;

return q;

}

int QueueEmpty (Queue *q)

{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}

return q->front == NULL;

}

int EnQueue (Queue *q, QueueData x)

{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}

Node * node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
errno = MALLOC_ERROR;
return FALSE;
}
node->data = x;
node->next = NULL;

if (q->front == NULL)
{
q->front = node;
q->rear  = node;
}
else
{
q->rear->next = node;
q->rear = node;
}

return TRUE;

}

int DeQueue (Queue *q, QueueData *x)

{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}

if (QueueEmpty(q))
{
errno = EMPTY_QUEUE;
return FALSE;
}

Node *p = q->front;
*x = p->data;

q->front = p->next;
free(p);

if (q->front == NULL)
q->rear = NULL;

return TRUE;

}

int GetFront (Queue *q, QueueData *x)

{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}

if (QueueEmpty(q))
{
errno = EMPTY_QUEUE;
return FALSE;
}

*x = q->front->data;

return TRUE;

}

int Destroy_Queue (Queue *q)

{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}

int x;
while (QueueEmpty(q) != TRUE)
{
DeQueue(q, &x);
}

free(q);

return TRUE;

}

#include "LinkQueue.h"

#include <stdio.h>

int main()

{
Queue* q = Create_Queue();

int i;
char str[50];
for (i = 0; i < 10; i++)
{
if (EnQueue(q, i) != TRUE)
{
sprintf (str, "第 %d 个元素入队失败", i);
myError(str);
}
}

int x;
for (i = 0; i < 10; i++)
{
if (DeQueue(q, &x) != TRUE)
{
sprintf (str, "第 %d 个元素出队失败", i);
myError(str);
}

printf ("x = %d\n", x);
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: