new、delete、以及queue类
本来以为很容易的,结果还是写了我两个小时。
用指针模拟queue类,再加上类,各种错误,总算是解决掉了--
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
class Item
{
private:
int time;
int cost;
public:
Item():time(0),cost(0){}
Item(int k):time(k)
{
cost=rand()%3;
}
Item (const Item &st)
{
time=st.time;
cost=st.cost;
}
Item &operator=(const Item &st)
{
time=st.time;
cost=st.cost;
return *this;
}
int dealt()
{
return time;
}
int dealc()
{
//cout<<"------"<<cost<<endl;
return cost; }
friend ostream &operator<<(ostream &os,Item &st)
{
os<<st.time<<endl<<st.cost;
return os;
}
};
struct ss
{
Item num;
struct ss *next;
};
class Queue
{
private:
struct ss *beg,*end;
int cnt;
int tolt;
int size;
int xx;
public:
Queue():beg(NULL),end(NULL),cnt(0),tolt(0),size(10),xx(0){};
Queue(const Queue &st)
{
cnt=st.cnt;
tolt=st.tolt;
size=st.size;
while(beg!=NULL)
{
ss *p=beg->next;
delete beg;
beg=p;
}
end=NULL;
ss *p=st.beg;
beg=new ss;
beg->next=NULL;
beg->num=p->num;
end=beg;
while(p->next!=NULL)
{
p=p->next;
ss *p1=new ss;
p1->num=p->num;
p1->next=NULL;
end->next=p1;
end=p1;
}
//return *this;
}
Queue &operator=(const Queue &st)
{
cnt=st.cnt;
tolt=st.tolt;
size=st.size;
while(beg!=NULL)
{
ss *p=beg->next;
delete beg;
beg=p;
}
end=NULL;
ss *p=st.beg;
beg=new ss;
beg->next=NULL;
beg->num=p->num;
end=beg;
while(p->next!=NULL)
{
p=p->next;
ss *p1=new ss;
p1->num=p->num;
p1->next=NULL;
end->next=p1;
end=p1;
}
return *this;
}
bool empty()
{
if(cnt==0) return true;
else return false;
}
bool full()
{
if(cnt==size) return true;
return false;
}
bool push(Item &st)
{
if(full()) return false;
cnt++;
if(beg==NULL)
{
ss *p=new ss;
p->num=st;
p->next=NULL;
beg=end=p;
}
else
{
ss *p=new ss;
p->num=st;
p->next=NULL;
beg->next=p;
end=p;
}
//cout<<beg->num<<endl;
return true;
}
bool pop()
{
if(empty()) return false;
cnt--;
xx++;
if(tolt<beg->num.dealt())
{
tolt=beg->num.dealt()+beg->num.dealc();
}
else
{
tolt+=beg->num.dealc();
}
ss *p=beg->next;
delete beg;
beg=p;
return true;
}
int top(int w)
{
int tmp=beg->num.dealt()+beg->num.dealc();
//cout<<"---"<<beg->num.dealt()<<" "<<beg->num.dealc()<<endl;
if(tmp<=w) pop();
}
void deal(int n)
{
tolt-=n;
}
~Queue()
{
while(beg!=NULL)
{
ss *p=beg->next;
delete beg;
beg=p;
}
}
friend ostream &operator<<(ostream &os,const Queue &st)
{
os<<"处理花费的总时间(分钟):"<<st.tolt<<endl<<"处理了多少人:"<<st.xx<<endl;
os<<"队列里面还有多少人:"<<st.cnt<<endl;
return os;
}
};
int main()
{
Queue q;
//int sum=1235;
int n,m;
cout<<"请输入n,m:";
cin>>n>>m;
if(n>m)
{
int tmp=n;
n=m;
m=n;
}
for(int i=n;i<=m;i++)
{
Item p(i);
q.push(p);
if(!q.empty())
{
q.top(i);
}
}
q.deal(n);
cout<<q;
return 0;
}
new、delete、以及queue类的更多相关文章
- Java中Queue类实现
原先在java编程中,Queue的实现都是用LinkedList Queue queue = new LinkedList(); 但正如jdk中所说的那样: 注意,此实现不是同步的.如果多个线程同时访 ...
- C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...
- 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)
C#常用的集合类型(ArrayList类.Stack类.Queue类.Hashtable类.Sort) .ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在Array ...
- Java实现Queue类
Java实现Queue类 import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Sc ...
- C++中的queue类、QT中的QQueue类
C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> 用法(以int型为例): queue<int> Q; //定义一个int ...
- 生产者、消费者模型---Queue类
Queue队列在几乎每种编程语言都会有,python的列表隐藏的一个特点就是一个后进先出(LIFO)队列.而本文所讨论的Queue是python标准库queue中的一个类.它的原理与列表相似,但是先进 ...
- Queue类
1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长的元素. 队列的尾部是队列中最短时间 ...
- queue 类
一:普通队列 1.队列特征:先进先出,它只允许在一端(队尾)进行插入元素操作,在另一端(队头)进行删除元素操作 2. 存取类函数 front():用来取出queue中的队头元素,对应于front()函 ...
- 数据结构——java Queue类
定义 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 图例 Que ...
随机推荐
- HDU 4648 Magic Pen 6 (。。。。。。。。。。)
Magic Pen 6 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- mac 终端添加颜色
1.打开终端,然后找到终端偏好设置,选择自己喜欢的颜色 2.然后切换到当前用户的家目录: cd ~ 3.打开文件,开始编辑".bash_profile", 添加下面两句 expor ...
- 【脚下生根】之深度探索安卓OpenGL投影矩阵
世界变化真快,前段时间windows开发技术热还在如火如荼,web技术就开始来势汹汹,正当web呈现欣欣向荣之际,安卓小机器人,咬过一口的苹果,winPhone开发平台又如闪电般划破了混沌的web世界 ...
- C# 使用系统方法发送异步邮件
项目背景: 最近在对几年前的一个项目进行重构,发现发送邮件功能需要一定的时间来处理,而由于发送是同步的因此导致在发送邮件时无法执行后续的操作 实际上发送邮件后只需要将发送结果写入系统日志即可对其他业务 ...
- SAP升级ECC6.0 引起的一个事故
上个月底,公司的SAP系统升级到了ECC6,在升级时,我们进行了所有关联系统的集成测试,当时没有发现什么问题. 过了2周,需要从SAP下载对账单了,这个时候问题出现了,很多分公司的数据下载失败.和SA ...
- python学习笔记——爬虫学习中的重要库urllib
1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...
- FCEUX金手指加强版 - 使用Lua脚本语言编写FC/NES金手指脚本
一直觉得大部分的FC/NES模拟器的作弊码金手指不是那么方便使用, 比如魂斗罗1代, 玩家的武器可以通过修改0xAA的值来改变: 0x11为M弹(重机枪),0x12为F弹(圈圈),0x13为S弹(散弹 ...
- Mac OS下Android Studio的Java not found问题,androidfound
Android Studio正式版已经发布一段时间了,使用Mac版的Android Studio可能与遇到Java not found:Android Studio was unable to fin ...
- oracle数据库rman异地恢复
自己想做两组rac之间的data guard,由于datafile,controlfile,甚至是archivelog都是存放在asm上的,直接复制数据有点不现实,asm磁盘总归都是要用的,所以想从a ...
- 关于try catch
说明try块中有return语句时,仍然会首先执行finally块中的语句,然后方法再返回. 如果try块中存在System.exit(0);语句,那么就不会执行finally块中的代码,因为Syst ...