顺序队列
来源:互联网 发布:linux开启snmp服务 编辑:程序博客网 时间:2024/06/08 03:56
头文件部分
#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;
}
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 自动将自定义的Revit样板文件显示在创建项目页面中
- 2017多校联合二1011/hdu6055Regular polygon计算几何+思维+暴力枚举
- Spring MVC之@RequestMapping 详解
- PriorityQueue
- 45-总结-【cartographer源码分析】系列的第五部分【kalman_filter】
- 顺序队列
- C++实现三次样条插值算法
- 较全面的常见的OJ评判结果以及它们表示的意思
- Binary String Matching
- hdu 1004 Let the Balloon Rise
- vsftpd服务器-匿名-本地-虚拟用户
- 题目1050:完数
- Linux学习第二十八篇--用户和群组
- 链式队列