C语言 顺序队列

xiaoxiao2021-02-28  105

#ifndef __SQQUEUE_H__ #define __SQQUEUE_H__ #include "error.h" #define TRUE  1 #define FALSE 0 #define SIZE 10 typedef int QueueData; typedef struct _queue { QueueData data[SIZE]; int front;     // 指向队头的下标 int rear;      // 指向队尾的下标 }Queue; // 置空队 int InitQueue (Queue *Q);   // 判队空否 int QueueEmpty (Queue *Q);   // 判队满否        int QueueFull (Queue *Q);       // 进队   int EnQueue (Queue *Q, QueueData x);      // 出队   int DeQueue (Queue *Q, QueueData *x); // 取队头 int GetFront (Queue *Q, QueueData *x);

#endif // __SQQUEUE_H__

#include "SqQueue.h" int InitQueue (Queue *q) { if (q == NULL) { errno = ERROR; return FALSE; } // 置空队 q->front = 0; q->rear  = 0; return TRUE; } int QueueEmpty (Queue *q) { if (q == NULL) { errno = ERROR; return FALSE; } return q->front == q->rear; } int QueueFull (Queue *q)  { if (q == NULL) { errno = ERROR; return FALSE; } return q->front == (q->rear+1)%SIZE; }  int EnQueue (Queue *q, QueueData x) { if (q == NULL) { errno = ERROR; return FALSE; } if (QueueFull(q)) { errno = FULL_QUEUE; return FALSE; } q->rear = (q->rear+1) % SIZE; q->data[q->rear] = x; return TRUE; } int DeQueue (Queue *q, QueueData *x) { if (q == NULL) { errno = ERROR; return FALSE; } if (QueueEmpty(q)) { errno = EMPTY_QUEUE; return FALSE; } q->front = (q->front + 1) % SIZE; *x = q->data[q->front]; return TRUE; } int GetFront (Queue *q, QueueData *x) { if (q == NULL) { errno = ERROR; return FALSE; } if (QueueEmpty(q)) { errno = EMPTY_QUEUE; return FALSE; } int index = (q->front + 1) % SIZE; *x = q->data[index]; return TRUE; }

#include "SqQueue.h" #include <stdio.h> int main() { Queue q; InitQueue(&q); if (QueueEmpty(&q)) { printf ("空队\n"); } 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-65402.html

最新回复(0)