本来以为很容易的,结果还是写了我两个小时。
用指针模拟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. HDU 2492 Ping pong (数状数组)

    Ping pong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. PWA 入门: 写个非常简单的 PWA 页面

    Progressive Web Apps 是 Google 提出的用前沿的 Web 技术为网页提供 App 般使用体验的一系列方案. 这篇文章里我们来完成一个非常简单的 PWA 页面. 一个 PWA ...

  3. 数字的可视化:python画图之散点图sactter函数详解

    最近开始学习python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  4. “C++的数组不支持多态”?

    先是在微博上看到了个微博和云风的评论,然后我回了“楼主对C的内存管理不了解”. 后来引发了很多人的讨论,大量的人又借机来黑C++,比如: //@Baidu-ThursdayWang:这不就c++弱爆了 ...

  5. pingback协议与traceback协议的区别

    wordpress 的 pingback协议与traceback协议区别

  6. PyCharm黄色波浪线提示: Simplify chained comparison

    译过来就是,可简化连锁比较: case 1 if a >= 0 and a <= 9: 1 可简化为: if 0 <= a <= 9: 1 就像我们的数学表达式一样.显然这种情 ...

  7. unity, 在材质上指定render queue

    材质球inspector面板在debug模式下可以看到Custom Render Queue一项: 其默认值为-1,表示使用相应shader的render queue设置. 也可以人为将其改为其它值, ...

  8. Atitit 获取剪贴板内容

    Atitit 获取剪贴板内容 1.1. Java当然有这个功能,但是体积大,先使用script语言实现吧..1 1.2. node.js 好像没这个api  ...1 1.3. Ahk也没有..Aut ...

  9. Atitti 过程导向 vs 结果导向 attlax的策

    Atitti 过程导向 vs 结果导向 attilax的策略 1. 结果导向的问题 以结果为导向”的明显弊端2 1.1. 白猫黑猫的策略是错误的2 1.2. 为了目的不择手段,完全违背了程序正义原则2 ...

  10. C++哪些运算符重载能够重载?

    运算符重载是C++极为重要的语言特性之中的一个.本文将用代码实例回答--C++哪些运算符能够重载?怎样重载?实现运算符重载时须要注意哪些? 哪些运算符能够重载,哪些不可重载? C++98,C++0x, ...