顺序队列

xiaoxiao2021-02-28  88

队列

定义 队列是只允许在一端删除,在另一端插入的线性表 允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear)。 特性 先进先出(FIFO, First In First Out)

error.h

#ifndef __ERROR_H__ #define __ERROR_H__ #include <stdio.h> #define ERROR -1 #define FULL_STACK -2 #define EMPTY_STACK -3 #define MALLOC_ERROR -4 #define FULL_QUEUE -5 #define EMPTY_QUEUE -6 int errno; // 错误号 void myError(char *str); char* myStrError(int num); #endif // __ERROR_H__

error.c

#include "error.h" void myError(char *str) { char *msg = myStrError(errno); printf ("%s: %s\n", str, msg); /* switch (errno) { case ERROR: printf ("%s: 输入参数错误\n", str); break; case FULL_STACK: printf ("%s: 满栈状态\n", str); break; case EMPTY_STACK: printf ("%s: 空栈状态\n", str); break; case MALLOC_ERROR: printf ("%s: 空间分配失败\n", str); break; } */ } char* myStrError(int num) { switch (errno) { case ERROR: return "输入参数错误"; case FULL_STACK: return "满栈状态"; case EMPTY_STACK: return "空栈状态"; case MALLOC_ERROR: return "空间分配失败"; case FULL_QUEUE: return "队满状态"; case EMPTY_QUEUE: return "队空状态"; } }

SqQueue.h

#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__

SqQueue.c

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

main.c

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

最新回复(0)