本来以为很容易的,结果还是写了我两个小时。
用指针模拟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类的更多相关文章

  1. Java中Queue类实现

    原先在java编程中,Queue的实现都是用LinkedList Queue queue = new LinkedList(); 但正如jdk中所说的那样: 注意,此实现不是同步的.如果多个线程同时访 ...

  2. C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)

    1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...

  3. 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)

    C#常用的集合类型(ArrayList类.Stack类.Queue类.Hashtable类.Sort) .ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在Array ...

  4. Java实现Queue类

    Java实现Queue类 import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Sc ...

  5. C++中的queue类、QT中的QQueue类

    C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> 用法(以int型为例): queue<int> Q; //定义一个int ...

  6. 生产者、消费者模型---Queue类

    Queue队列在几乎每种编程语言都会有,python的列表隐藏的一个特点就是一个后进先出(LIFO)队列.而本文所讨论的Queue是python标准库queue中的一个类.它的原理与列表相似,但是先进 ...

  7. Queue类

    1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长的元素. 队列的尾部是队列中最短时间 ...

  8. queue 类

    一:普通队列 1.队列特征:先进先出,它只允许在一端(队尾)进行插入元素操作,在另一端(队头)进行删除元素操作 2. 存取类函数 front():用来取出queue中的队头元素,对应于front()函 ...

  9. 数据结构——java Queue类

    定义 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 图例 Que ...

随机推荐

  1. shell小工具查看Hadoop中System.out输出的日志

    #!/bin/bashrm ~/log.logecho "Please Input JobID:"read NAMEmap_log="/home/grid/hadoop- ...

  2. 安卓高手之路之ClassLoader(二)

    因为ClassLoader一定与虚拟机的启动有关系,那么必须从Zygote的启动开始看代码.下面就分析一下这些代码,行数不多: int main(int argc, const char* const ...

  3. C# WinForm给Button或其它控件添加快捷键响应

    今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...

  4. 【C语言】为什么指明数组的列数?

    首先,我们拿二维数组为例.二维数组称为矩阵.二维数组在概念上是二维的,但实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的.如果将二维数组作为参数传递给函数,那么在函数的参数声明中必 ...

  5. 【struts2】自定义登录检查拦截器

    在实际开发中,一个常见的功能要求是:有很多操作都需要登录后才能操作,如果操作的时候还没有登录,那么通常情况下会要求跳转回到登录页面. 1)如何实现这样的功能呢? 在具体实现之前,先来考虑几个问题: ( ...

  6. win7 32 安装mongoDB遇到的问题

    net start MongoDB报错:发生服务特定错误: 100. 直接进入db文件夹,先删除 mongod.lock 文件,然后重新启动服务即可:要是还不行,就继续删 storage.bson文件 ...

  7. C++中没有finally,那么应该在哪里关闭资源?

    这是一篇有趣的帖子 原文链接: http://bbs.csdn.net/topics/90070457 楼主: C++中没有finally,那么应该在哪里关闭资源? C++的try{}catch(){ ...

  8. tomcat jvm 参数优化

    1. 内存设置 常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻 ...

  9. mapreduce 只使用Mapper往多个hbase表中写数据

    只使用Mapper不使用reduce会大大减少mapreduce程序的运行时间. 有时候程序会往多张hbase表写数据. 所以有如题的需求. 下面给出的代码,不是可以运行的代码,只是展示driver中 ...

  10. python3 装饰器应用举例

    [引子] python 中的装饰器是oop(面向对象编程)设计模式.之装饰器模式的一个应用.由于有语法糖衣的缘故.所以写起来也更加方便 [从一个比较经典的应用场景来讲解装饰器] 有过一定编程经历的工程 ...