数据结构——顺序队列

来源:互联网 发布:淘宝网的营销模式是 编辑:程序博客网 时间:2024/05/21 19:31

头文件:

#ifndef __SQQUEUE_H__#define __SQQUEUE_H__#include "error.h"#define TRUE  1#define FALSE 0#define SIZE 10typedef 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__

错误信息头文件:

#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   -6int errno;     // 错误号void myError(char *str);char* myStrError(int num);#endif // __ERROR_H__

输出错误信息函数:

#include "error.h"void myError(char *str){    char *msg = myStrError(errno);    printf ("%s: %s\n", str, msg);}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 "队空状态";    }}

功能函数:

#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函数:

#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;}
阅读全文
0 0