一.简介

  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

  四.测试

  

数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现的更多相关文章

  1. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  2. 队列(链式队列)----C语言

    链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...

  3. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  4. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  5. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  6. 数据结构算法C语言实现(五)---2.3重新定义线性链表及其基本操作

    一.简述 ...由于链表在空间的合理利用上和插入.删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表的长度时不如顺序存储结构的缺点:另一 ...

  7. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  8. 数据结构算法C语言实现(二十七)--- 7.2图的遍历

    一.简述 栈与队列,DFS与BFS.仅以连接表为例实现. 二.头文件 BFS要用到的头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@g ...

  9. 数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树

    一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈 ...

随机推荐

  1. NOI2018准备Day19

    5天没写. 伸展树  主席树 3到线段树模板题

  2. 初中级Web开发人员的福音:《JavaScript启示录》上市了

    经历过14个月的等待,本书终于上市了,完全口语化叙述,请参考右边的链接. 本书介绍 本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现.本书的写作目的也不是鉴别Jav ...

  3. Mybatis.Net 整合 ODP.NET Managed

    初步接触MyBatis.Net的朋友,请先移步 MyBatis.Net 学习手记 1. 项目中先添加Oracle.ManagedDataAccess.dll程序集引用 2. MyBatis.Net 中 ...

  4. 自定义圆形控件RoundImageView并认识一下attr.xml

    今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...

  5. RHEL每天定时备份Oracle

    步骤: (1)创建脚本文件bak_112.sh,内容如下(自动按当前日期备份数据库): #!/bin/sh export ORACLE_BASE=/u01/app/oracle; ORACLE_HOM ...

  6. js单选和复选框

    http://blog.csdn.net/chelen_jak/article/details/44827393 http://www.gbtags.com/technology/jquerynews ...

  7. MATLAB函数freqz()

    MATLAB提供了专门用于求离散系统频响特性的函数freqz(),调用freqz()的格式有以下两种:l [H,w]=freqz(B,A,N) B和A分别为离散系统的系统函数分子.分母多项式的系数向量 ...

  8. C# 利用反射动态将字符串转换成属性对应的类型值

    /// <summary> /// 为指定对象分配参数 /// </summary> /// <typeparam name="T">对象类型& ...

  9. wsdl说明书

    WSDL文档的结构实例解析 <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns ...

  10. 不停止MySQL服务的情况下修改root的密码

    首先我们得知道一个MySQL普通用户的密码 这里我来记录一下我的操作过程 这里我刚刚到一家公司上面装的是cacti,但是之前的运维不记得MySQL的root密码了 但是他知道cacti的密码, 用户: ...