当前位置: 首页 > 编程日记 > 正文

C++用数组和链表分别实现Queue

C++用数组和链表分别实现Queue

昨天写了《C++用数组和链表分别实现Stack》,今天就是《C++用数组和链表分别实现Queue》,

队列就是先来的先被处理掉,后来的就等,直到成为先来的,实现起来感觉和栈差不多。

模板好用的,功能强大,有些东东还是写成模板的好,废话昨天都说了,今天是不想说的,

博客园的哥们说我的博客不符合推荐到首页的要求,只好加几句废话。

ContractedBlock.gifExpandedBlockStart.gif链表版
template<typename T,typename container>
class queue
{
public:
bool empty() const
{
return len==0;
}

void checkEmpty()
{
if(empty())
{
throw new exception("队列中没有数据");
}
}

T
& back()
{
checkEmpty();
return cur->val;
}

const T& back() const
{
return back();
}

void pop()
{
checkEmpty();
if(head->next==cur)
{
delete head
->next;
head
->next=NULL;
}
else
{
node
* tmp=head->next;
head
->next=tmp->next;
delete tmp;
}
--len;
}

T
& front()
{
checkEmpty();
return head->next->val;
}

const T& front() const
{
return front();
}

void push(const T& val)
{
node
*tmp=new node(val);
cur
->next=tmp;
cur
=tmp;
++len;
}

queue()
{
initialize();
}

explicit queue(const container& cont)
{
initialize();
vector
<int>::const_iterator iter=cont.begin();
while(iter!=cont.end())
{
push(
*iter++);
}
}

~queue()
{
node
*tmp;
while(tmp!=NULL)
{
tmp
=head;
head
=head->next;
delete tmp;
tmp
=NULL;
}
delete cur;
}


int size()
{
return len;
}

protected:
typedef
struct node1
{
node1
*next;
T val;
node1(T v):val(v),next(NULL){}
}node;

private :
int len;
node
*head;
node
*cur;
void initialize()
{
head
=new node(-1);
cur
=head;
len
=0;
}
};
ContractedBlock.gifExpandedBlockStart.gif数组版

template
<typename T,typename container>
class queue
{
public:
bool empty() const
{
return head==rail;
}

void checkEmpty()
{
if(empty())
{
throw new exception("队列中没有数据");
}
}

//队尾元素
T& back()
{
checkEmpty();
return arr[rail-1];
}

const T& back() const
{
return back();
}

//出队
void pop()
{
checkEmpty();
arr[head
++]=0;
}

//队头元素
T& front()
{
checkEmpty();
return arr[head];
}

const T& front() const
{
return front();
}

//入队
void push(const T& val)
{
if(rail>=capacity){
capacity
=(rail-head)*2;
T
*tmp=new T[capacity];
int j=0;
for(int i=head;i<rail;i++)
{
tmp[j
++]=arr[i];
}
delete arr;
arr
=tmp;
rail
=rail-head;
head
=0;
}
arr[rail
++]=val;
}

queue()
{
initialize(
4);
}

queue(
int capacity)
{
initialize(capacity);
}

explicit queue(const container& cont)
{
initialize(cont.size());
vector
<int>::const_iterator iter=cont.begin();
while(iter!=cont.end())
{
push(
*iter++);
}
}

~queue()
{
delete arr;
}

//队列中元素个数
int size()
{
return rail-head;
}

protected:
typedef
struct node1
{
node1
*next;
T val;
node1(T v):val(v),next(NULL){}
}node;

private :
int capacity;
int head;//对头元素的位置
int rail;//对尾元素的位置
int *arr;

void initialize(int cap)
{
capacity
=cap;
arr
=new int[capacity];
head
=rail=0;
}
};



作者:陈太汉

转载于:https://www.cnblogs.com/hlxs/archive/2011/07/12/2104386.html

相关文章:

bzoj1150 [CTSC2007]数据备份Backup

大概就是写了道生日礼物那个不知道叫啥的贪心。。。。。 大概就是说这道题和那个比较像。。。 所以留着看看吧&#xff0c;哪天想起了回来做这道题咯~ 转载于:https://www.cnblogs.com/LLppdd/p/9051440.html

004本周总结报告

这一周总的来说并没有学到多少东西。只是学习了java数组相关的知识&#xff0c;发现和C/C中的数组基本一样&#xff0c;同时也了解到堆内存和栈内存的概念。在学习数组时发现java数组的length属性很好用&#xff0c;学习了数组的插入赋值&#xff0c;冒泡和选择排序等并用数组的…

JS保留两位小数

JS保留两位小数 对于一些小数点后有多位的浮点数&#xff0c;我们可能只需要保留2位&#xff0c;但js没有提供这样直接的函数&#xff0c;所以我们得自己写函数实现这个功能&#xff0c;代码如下&#xff1a; function changeTwoDecimal(x) { var f_x parseFloat(x); if…

【资源分享】The Beatles(披头士)乐队所有专辑带封面

资源免费分享&#xff0c;送给各位披头士的粉丝。只求个赞可以吗。 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 链接:https://pan.baidu.com/s/1N5BXA18JeaznYhRRy6kiAw 提取码:5439

Serial Communications in Win32

http://msdn.microsoft.com/en-us/library/ms810467.aspx http://hi.baidu.com/beisika/blog/item/b204d58f6c3bece9513d9297.html

platform_driver_register适配的两种方式及probe是否启动与硬件关系

platform_driver_register2种方式学习 1.platform_device_register与platform_driver_register配合使用&#xff1a; 实例代码摘自下述网址&#xff1a; 这样当两个name一样时&#xff0c;就会嗲用mt65xx_leds_probe这个函数了。 static struct platform_driver mt65xx_leds_d…

Java中创建泛型数组

Java中创建泛型数组 使用泛型时&#xff0c;我想很多人肯定尝试过如下的代码&#xff0c;去创建一个泛型数组 T[] array new T[]; 当我们写出这样的代码时编译器会报Cannot create a generic array of T&#xff0c;初学泛型时&#xff0c;看到这个错就以为Java中不能创建泛型…

eclipse假死解决办法

因为要同时开发android&#xff0c;还有毕设要用myeclipse&#xff0c;装了太多插件&#xff0c;eclipse老卡死&#xff0c;解决办法如下&#xff1a; 1、关闭myeclipse的插件&#xff08;开发网页时再打开&#xff09;方法如下&#xff1a; &#xff08;1&#xff09;eclipse-…

Petapoco 连接oracle11g 自动生成poco时遇到的问题

偶尔在园子里看到.net的轻量级ORM框架Petapoco的介绍&#xff0c;觉得很有趣。相关介绍&#xff1a;PetaPoco&#xff1a;适用于.NET的微型ORM 正好最近有个C#Oracle11g的项目&#xff0c;想趁此机会试试用petapoco来做数据层的框架。 在配置步骤和遇到的问题&#xff0c;记录如…

网页分享插件 share.js 国外常用

这两天做推广&#xff0c;要求实现页面分享到国外各大社交媒体的功能。自己去翻各大厂的文档的话&#xff0c;实现起来时间相当长。 github 上找了个插件&#xff0c;很6. 地址&#xff1a; https://github.com/ellisonleao/sharer.js 支持主流的国外的社交媒体的分享。 主要支…

ORM操作models一对多、多对多关系

ORM操作 单表、一对多表操作 1 from django.db import models2 3 4 class UserGroup(models.Model):5 title models.CharField(max_length32)6 7 8 class UserInfo(models.Model):9 username models.CharField(max_length32) 10 password models.CharField(max…

【基础知识】如何快速转发CSDN博客

使用&#xff1a;火狐浏览器、Markdown编辑器 一、打开要转发的博客、按F12并点击查看器 二、复制页面的代码&#xff08;此处用到一个小技巧&#xff09; 1、鼠标点击该按钮 2、将鼠标放到图示位置&#xff0c;使变色的位置覆盖所有博客的内容后点击鼠标左键 3、看到下方代码…

SQLServer 系统表

SQLServer 系统表 http://blog.163.com/zangyunling126/blog/static/1646245052010101641620415/ http://www.cnblogs.com/yolion/archive/2007/10/08/916767.html SQL系统表说明 http://hi.baidu.com/etimeman/blog/item/3d5d82fc09bbfff8fc037fae.html SQLServer系统表详细说…

c#之旅--第一天

昨天开始的第一篇博客被我这个菜鸟找不到了&#xff0c;那就从今天开始吧废话也不多说了&#xff0c;good good study, day day up! 首先总结一下昨天所学&#xff1a; 从程序的开头开始吧&#xff0c;首先是引用&#xff0c;这里总结一下using的用法&#xff1a;1,。将外部命名…

第十一周总结CoreIDRAW

一、学到了什么&#xff1f; 1、交互式工具为制作逼真的特效提供了基础&#xff0c;如交互式调和工具常用于制作逼真的过滤效果&#xff1b;交互式阴影工具用于制作逼真的阴影&#xff1b;而交互式透明工具用于制作逼真的高光效果。 2、利用这些工具做了232页实训——画册制作和…

formatData

//解决传入0 格化后不返回空的问题function formatAmountValueNew(objValue,flag) { if(objValue!"" && objValue!null) { if(flag0) { // 验证输入金额数值或数值字符串&#xff1a; return objValue.toString().replace(/,/g, "");…

【java】将自己写的类生成说明文档的方法

使用工具&#xff1a; jdk中的javadoc 实现步骤&#xff1a; 1、将java文件放到一个目录之下 2、进入doc(winR,输入cmd) 3、通过cd指令进入存放java文件的文件夹 4、编译java文件 代码实现&#xff1a; javac HelloWorld.java 注&#xff1a; &#xff08;1&#xff09…

Scrapy和MongoDB的应用

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取Web站点并从页面中提取结构化的数据.它最吸引人的地方在于任何人都可以根据需求方便的修改。 MongoDB是现下非常流行的开源的非关系型数据库&#xff08;NoSql&#xff09;&#xff0c;它是以“key-value…

linux bunzip2命令

Linux命令&#xff1a;bunzip2 功能说明&#xff1a;.bz2文件的解压缩程序。 语 法&#xff1a;bunzip2 [-fkLsvV][.bz2压缩文件] 补充说明&#xff1a;bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接&#xff0c;执行bunzip2与bzip2 - d的效果相同。 参…

[C++]C++中的IO类

C中的IO类 C语言不直接处理输入输出&#xff0c;而是通过一组定义在标准库中的类型来处理IO。这些类型支持从设备读取数据&#xff0c;向设备写入数据的IO操作&#xff0c;设备可以是文件&#xff0c;控制台窗口等。还有一些类型允许内存IO&#xff0c;即从string读取数据&…

solr 3.5 配置及服务器设置

一、solr 的简介 Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。Apache Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成&#xff0c;每个 Field 表示资源的一个属性。Solr…

【基础知识】截长图的方法以及防止截图时下拉框自动收回的方法

截长图的方法&#xff1a; 博主之前使用的tim&#xff0c;不具备截长图的功能&#xff0c;之后百度了很多的方法&#xff0c;最后发现QQ的截长图功能最好用&#xff0c;很不解&#xff0c;tim不应该是偏向于办公吗&#xff0c;这种功能竟然还能阉割&#xff1f; 使用工具&#…

IFeature接口

用于设置一个要素的属性&#xff1a; 转载于:https://www.cnblogs.com/dengshiwei/p/4258741.html

IBM公司新推一个基于云计算的Web分析工具

据外媒报道&#xff0c;IBM最新推出了一个Web分析工具&#xff0c;结合了其现有的基于B/S架构的专业数据度量和分析工具 CoreMetrics和营销分析服务Unica。IBM在去年耗资4.8亿美元收购Unica&#xff0c;帮助企业分析客户数据&#xff0c;并预测他们的需求和行 动&#xff0c;Un…

【leetcode 字符串】466. Count The Repetitions

https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandyang/p/6149294.html转载于:https://www.cnblogs.com/itcsl/p/9061427.html

TS - 处理故障的一些通用方法

本文是对解决问题的一些方法内容的改写与补充&#xff01; 首要的问题 对于发生在线上的问题&#xff0c; 最紧要的事项一定是“以最快最有效的方式解决问题&#xff0c;降低对线上业务的影响”&#xff0c;然后才是深挖问题&#xff0c;探求根本原因&#xff0c;防微杜渐&…

javascript读取XML文档

xml <?xml version"1.0" encoding"utf-8"?> <Menus> <Menu id"0" name"首页"> <MenuItemTitle sid"01" mid"0" name"常用选项"> <MenuItem mid"0" tid"0…

设计模式读书笔记-单件模式

单件模式- 确保一个类只有一个实例&#xff0c;全局只有一个入口点。 类如下: public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here private Singleton() {} public static Singleton getInstance() { if (uniqueInst…