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)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
随机推荐
- linux笔记:linux常用命令-文件搜索命令
文件搜索命令:find(文件搜索) 一些示例: 注意:在以文件名为条件进行搜索时,支持通配符. 多条件搜索,以及直接对搜索到的文件进行操作: 文件搜索命令:locate(在文件资料库中查找文件) 文件 ...
- DispatcherServlet中使用的特殊的Bean
DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean: 1.Controller:处理器/页面控制器,做的是M ...
- iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好
转载: iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好 内容来自stack overflow的一个回答:ReactiveCocoa vs RxSwift – pros an ...
- 对Linux新手非常有用的 20个命令
你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳. ...
- (19)odoo中的javascript
-----------更新日期15:17 2016-02-16 星期二-----------* 用到的js库 我们可以打开 addons/web/views/webclient_template. ...
- 51nod 1613翻硬币
题目链接:51nod 1613 翻硬币 知乎上的理论解法http://www.zhihu.com/question/26570175/answer/33312310 本题精髓在于奇偶性讨论. 若 n ...
- 移动前端开发的viewport总结整理
1.通俗讲移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那块区域,但不是浏览器可视区域.一般来讲,移动设备上的viewport都要大于浏览器的可视区域.移动设备上的浏览器会把默认的 ...
- State模式的经典应用场景:订单处理(c#实现)
State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了行为与对象的依赖. 场景描述 在经典的订单处理场景中 ...
- js便签笔记(13)——jsonp其实很简单【ajax跨域请求】
前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白 ...
- 获取图片颜色的rgb,以供css设计背景颜色
ColorPix