数据结构顺序队列
2017-08-04 19:32
309 查看
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
顺序队列:
#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__
顺序队列:
#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; }
相关文章推荐
- 数据结构-->(循环)队列 【队列的顺序实现】ADT
- 数据结构之自建算法库——顺序环形队列
- 数据结构学习之循环队列(顺序存储)
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构之队列顺序表示与实现1
- 数据结构--顺序队列基本操作
- [数据结构][适用循环队列和非循环队列]顺序队列的实现。
- 【数据结构】·【顺序队列】
- 数据结构(C实现)------- 顺序队列(循环队列之计数器实现)
- 数据结构——顺序队列
- C语言数据结构-4.队列的顺序及链式存储结构
- 数据结构学习----顺序循环队列(Java实现)
- 数据结构之队列顺序表示与实现2
- C数据结构-优化顺序队列
- 数据结构(顺序单链表、链式单链表、顺序栈、链式栈、顺序队列、链式队列)
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 数据结构编程笔记八:第三章 栈和队列 顺序栈和进位制程序的实现
- 数据结构学习笔记-队列的顺序存储(循环队列)
- 数据结构-队列-顺序存储完整可执行代码
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素