C语言 链式队列

xiaoxiao2021-02-28  119

#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; }

转载请注明原文地址: https://www.6miu.com/read-66463.html

最新回复(0)