C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从队首指到队尾(front -> Front_Node -> …… -> rear -> Rear_Node).
代码:
Node.h文件
/*
* Node.h
*
* Created on: 2015年9月10日
* Author: Lv_Lang
*/
#ifndef NODE_H_
#define NODE_H_
#include "stdio.h" // for NULL
typedef int Queue_entry;
typedef Queue_entry Node_entry;
struct Node
{
// data members
Node_entry entry; // 存放的元素
Node *next; // 指向下一个元素的指针
// Constructors
Node();
Node(Node_entry item, Node *add_on = NULL);
};
#endif /* NODE_H_ */
Node.cpp文件:
/*
* Node.cpp
*
* Created on: 2015年9月10日
* Author: Lv_Lang
*/
#include "Node.h"
Node::Node()
{
next = NULL;
}
Node::Node(Node_entry item, Node *add_on)
{
entry = item;
next = add_on;
}
Queue.h文件:
/*
* Queue.h
*
* Created on: 2015年9月10日
* Author: Lv_Lang
*/
#ifndef QUEUE_H_
#define QUEUE_H_
#include "stdio.h"
#include "Node.h"
enum Error_code {overflow,underflow,success};
class Queue
{
public:
// Standard Queue methods
Queue();
bool empty()const;
Error_code append(const Queue_entry &item);
Error_code serve();
Error_code retrieve(Queue_entry &item)const;
// Safety features for linked structures
~Queue();
Queue(const Queue &original);
void operator = (const Queue &original);
// Extended linked queue
bool full()const;
int size()const;
void clear();
protected:
Node *front, *rear;
};
#endif /* QUEUE_H_ */
Queue.cpp文件
/*
* Queue.cpp
*
* Created on: 2015年9月10日
* Author: Lv_Lang
*/
#include "Queue.h"
Queue::Queue()
{
front = NULL;
rear = NULL;
}
bool Queue::empty()const
{
if((front == NULL) && (rear == NULL))
return true;
else
return false;
}
Error_code Queue::append(const Queue_entry &item)
{
Node *new_rear = new Node(item);
if(new_rear == NULL)
return overflow;
if(rear == NULL) front = rear = new_rear;
else
{
rear->next = new_rear;
rear = new_rear;
}
return success;
}
Error_code Queue::serve()
{
if(empty())
return underflow;
else
{
Node *old_front = front;
front = front->next;
if(front == NULL) rear = NULL;// 此处需注意将rear也置为0
delete old_front;
return success;
}
}
Error_code Queue::retrieve(Queue_entry &item)const
{
if(empty())
return underflow;
else
{
item = front->entry;
return success;
}
}
Queue::~Queue()
{
if(!empty())
{
serve();
}
}
Queue::Queue(const Queue &original)
{
Node *new_front, *original_front = original.front;
if(original.front == NULL)
front = rear= NULL;
else
{
front = new_front = new Node(original_front->entry);
while(original_front->next != NULL)
{
original_front = original_front->next;
new_front->next = new Node(original_front->entry);
new_front = new_front->next;
}
}
}
void Queue::operator =(const Queue &original)
{
Node *new_front, *original_front = original.front;
if(original.front == NULL)
front = rear= NULL;
else
{
if(!empty())
clear();
else
{
front = new_front = new Node(original_front->entry);
while(original_front->next != NULL)
{
original_front = original_front->next;
new_front->next = new Node(original_front->entry);
new_front = new_front->next;
}
}
}
}
bool Queue::full()const
{
Node *new_front = new Node();
if(new_front == NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> delete new_front;</span>
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>}
else
{
delete new_front;
return false;
}
}
int Queue::size()const
{
Node *window = front;
int count = 0;
while(window != NULL)
{
window = window->next;
count++;
}
return count;
}
void Queue::clear()
{
if(!empty())
{
serve();
}
}
main函数测试文件:
/*
* main.cpp
*
* Created on: 2015年9月10日
* Author: Lv_Lang
*/
#include "Queue.h"
int main()
{
Queue myqueue;
myqueue.append(2);
myqueue.append(6);
int size;
size = myqueue.size();
printf("%s %d\n","Size is ",size);
myqueue.serve();
int a;
myqueue.retrieve(a);
printf("%d\n",a);
size = myqueue.size();
printf("%s %d\n","Size is ",size);
Queue QUEUE(myqueue);
int b;
QUEUE.retrieve(b);
printf("%d\n",b);
size = QUEUE.size();
printf("%s %d\n","Size for QUEUE is ",size);
myqueue.clear();
size = myqueue.size();
printf("%s %d\n","Size is ",size);
return 0;
}
C++数据结构之链式队列(Linked Queue)的更多相关文章
- 数据结构之链式队列(C实现)
1.1 linkqueue.h #ifndef LINKQUEUE_H #define LINKQUEUE_H #include <stdio.h> #include <mallo ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- 数据结构——线性表——队列(queue)
队列也是一种特殊的线性表,它的特点是先入先出(FIFO,即first in first out).它的意思也很直观,想象一下排队买票,先排的人先买(插队是不对的,所以别去想).它也是很常用的数据结构, ...
- 数据结构14:队列(Queue),“先进先出”的数据结构
队列是线性表的一种,在操作数据元素时,和栈一样,有自己的规则:使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列,如图1. 图1 队列示意图 称进入队列的一端为“队尾”:出队列的一端 ...
- python 队列(QUEUE)
QUEUE python中多线程编程的数据结构 基本FIFO队列 class Queue.Queue(maxsize=0) 先进先出,maxsize为队列中能存放的数据个数上限. import Que ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
- 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构
题目: 7-1 银行业务队列简单模拟 (30 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
随机推荐
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- 如何使用JavaScript和正则表达式进行数据验证
利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作,下面与大家分享下如何使用JavaScript和正则表达式进行数据验证,感兴趣的朋友可以参考下哈 数据验证 ...
- robotframework笔记9
列表和字典 通过专用关键字创建了列表和字典.我们将在这里看到创建的两个例子 ︰ 选择 *** Settings *** Library BuiltIn Library Collections *** ...
- 连续型变量的推断性分析——t检验
连续型变量的推断性分析方法主要有t检验和方差分析两种,这两种方法可以解决一些实际的分析问题,下面我们分别来介绍一下这两种方法 一.t检验(Student's t test) t检验也称student ...
- java多线程下如何调用一个共同的内存单元(调用同一个对象)
/* * 关于线程下共享相同的内存单元(包括代码与数据) * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作. * 对于Thread(Runnable target)构造方法创建的线程, ...
- 判断jQuery元素是否隐藏
第一种:使用CSS属性 复制代码 代码如下: var display =$('#id').css('display'); if(display == 'none'){ alert("被 ...
- SELECTION-SCREEN 文本丢失
最近有点无聊....随便找点东西填了... 自从系统上线,经常出现程序的的文本丢失,然后选择界面就变成英文的了....一直在出现,就是解决不了,不知道到底是哪里的问题 严重怀疑是服务器上文件丢失... ...
- C语言知识整理(1):简介
由于项目要求,需要学习iOS移动端开发.iOS开发的核心语言是Objective-C,Objective-C是在C语言的基础加了一层面向对象的语法.为了能够更好地掌握Objective-C,故先学习C ...
- cookie、 sessionStorage 、localStorage之间的区别和使用
1.cookie:存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密.一般应用最典型的案列就是判断注册用户是否 ...
- CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式
转自:http://www.w3school.com.cn/css/css_boxmodel.asp 要知道在父元素:float, rel, abs位置情况下,box模型的变换情况,请见:http:/ ...