一.简介

  FIFO。

  二.头文件

 //3_4_part1.h
/**
author:zhaoyu
email:zhaoyu1995.com@gmail.com
date:2016-6-9
note:realize my textbook <<数据结构(C语言版)>>
*/
//Page 61
#include <cstdio>
#include "head.h"
#define QElemType int
//----单链队列:队列的链式存储结构----
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
QueuePtr front;//队列头指针
QueuePtr rear;//队列尾指针
}LinkQueue;
//基本操作的声明及实现
Status InitQueue(LinkQueue &Q)
{
//构造一个空队列
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front)
{
exit(OVERFLOW);
}
Q.front->next = NULL;
return OK;
}
Status DestroyQueue(LinkQueue &Q)
{
//销毁队列 Q ,Q 不存在
while (Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return OK;
}
Status ClearQueue(LinkQueue &Q)
{
//将 Q 清为空队列
}
Status QueueEmpty(LinkQueue Q)
{
//若队列 Q 为空,则返回 TRUE,否则返回 FALSE
}
int QueueLength(LinkQueue Q)
{
//返回 Q 的元素个数
}
Status GetHead(LinkQueue Q, QElemType &e)
{
//若队列不空,则用 e 返回 Q 的队列头元素, 并返回 OK,
//否则返回 ERROR }
Status EnQueue(LinkQueue &Q, QElemType e)
{
//插入 e 为 Q 的新的队尾元素
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p)
{
exit(OVERFLOW);
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue &Q, QElemType &e)
{
//若队列不空,则删除 Q 的队头元素,用 e 返回其值,
//并返回 OK,否则返回 ERROR
if (Q.front == Q.rear)
{
return ERROR;
}
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
free(p);
return OK;
}
void visit(void)
{ }
Status QueueTraverse(LinkQueue Q, void visit())
{ }
void PrintQueue(LinkQueue Q)
{
//QueuePtr p = Q.front;注意头结点、头指针
QueuePtr p = Q.front->next;
while (p)
{
printf("%d\t", p->data);
if (p == Q.rear)
{
break;
}
p = p->next;
}
printf("\n");
}

3_4_part1.h

  三.CPP文件

 #include "3_4_part1.h"
int main(int argc, char const *argv[])
{
LinkQueue Q;
InitQueue(Q);
for (int i = ; i < ; i++)
{
EnQueue(Q, i);
}
PrintQueue(Q);
int e;
for (int i = ; i < ; ++i)
{
DeQueue(Q, e);
printf("%d\t", e);
}
return ;
}

3_4_part1.cpp

  四.测试

  

最新文章

  1. 高性能IO模型浅析
  2. Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件
  3. CentOS下 pycharm开发环境搭建
  4. 【转】Unity3d + NGUI 的多分辨率适配
  5. 最短的可通过编译的C语言程序
  6. Delphi的并行计算
  7. [ Database ] [ Sybase ] [ SQLServer ] sybase 與SQL Server的界接方式
  8. swift 自行理解
  9. Python编写相关注意事项
  10. 【最大流】【HDU3572】Task Schedule
  11. BZOJ 无数据题集合
  12. OptiScroll 公共例子(只修改了滚动条颜色)
  13. windows phone7开发环境配置错误
  14. [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
  15. 观光公交noip&lt;贪心&gt;
  16. sort命令详解
  17. JavaNIO缓冲区
  18. JS CKEditor使用setData后绑定click事件
  19. LeetCode Javascript实现 344. Reverse String 292. Nim Game 371. Sum of Two Integers
  20. phpstorm:如何设置代码自动换行

热门文章

  1. HTTP错误代码
  2. Gruntjs: grunt-usemin使用心得
  3. Java类加载和类反射回顾
  4. 【算法之美】你可能想不到的归并排序的神奇应用 — leetcode 327. Count of Range Sum
  5. ajax请求过程中下载文件在火狐下的兼容问题
  6. 如何把自己打造成技术圈的 papi 酱
  7. 基于FPGA的通信信号源的设计
  8. 浅谈Javascript 中几种克隆(clone)方式
  9. 15-grep 简明笔
  10. 【原创】解决jquery在ie中不能解析字符串类型xml结构的xml字符串的问题