数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)

本文出自:http://blog.csdn.net/svitter

题目12:计算机学院学生会的打印机(优先队列)

小明抱怨学生会的打印机不符合FIFO的原则,看到很多在他后面来打印的同学比他先打印出来。五分钟前,小明的文件就是下一个候选的,如今小明的文件又排到了后面。学生会的同学给小明解释说,学生会的打印机不是採用传统的队列方式,而是採用一种自定义的优先队列方式:每一个要打印的文件被赋予了一个从1到9的优先级(9最高,1最低)。打印规定例如以下:

将队列中要打印的文件f从队列中拿出来;

假设在队列中有优先级高于f的文件,则不打印f,将f排到队列的最后;否则打印f。

小明知道打印新规以后,询问他的文件到底多长时间可以打印出来,如果没分文件打印的时间都是1分钟,小明的文件在打印队列中,而且不再有新的文件进入到打印队列。请你帮助小明计算一下他还须要等多长时间。建议完毕人数1人。

加入了小元素的筛选代码

PriorityQueue.cpp:

//============================================================================
// Name        : PriorityQueue.cpp
// Author      : vit
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <stdio.h>
#include "Queue.h"
using namespace std;

int main() {
	Queue *q;
	q = new Queue();
	int i;
	int n, m, val, num;
        int mval;
	Node *p;
	freopen("test", "r", stdin);
	while(~scanf("%d%d", &n, &m))
	{
		num = 1;
		for(i = 1; i <= n; i++)
		{
			scanf("%d", &val);
			//printf("第%d号正在增加队列...\n", i);
			p = new Node(val, NULL, i);
                        if(i == m)
                        {
                               mval = val;
                        }
			q->push(p);
		}
                q->check(mval);

		//printf("队列增加完毕。\n");
		while(!q->IsEmpty())
		{
			p = q->top();
			//printf("当前打印的是第%d号\n", p->num);
			if(p->num == m)
			{
				printf("小明在第%d分钟打印。\n", num);
			}
			q->pop();
			num++;
		}
	}
	return 0;
}

Queue.cpp:

/*
 * Queue.cpp
 *
 *  Created on: 2014Äê6ÔÂ15ÈÕ
 *      Author: vit
 */

#include <stdio.h>
#include "Queue.h"

Queue::Queue() {
	// TODO Auto-generated constructor stub
	this->front = this->rear = NULL;
}

bool Queue::IsEmpty(){
	return this->rear == NULL;
}

void Queue::push(Node *n){
	if(IsEmpty())
	{
		this->front = this->rear = n;
	}
	else
	{
		this->rear->next = n;
		this->rear = n;
	}
	return;
}

void Queue::pop(){
	if(IsEmpty())
	{
		return;
	}
	Node *p = this->front;
	if(this->front == this->rear)
	{
		p = this->front;
		this->front = this->rear = NULL;
	}
	else
	{
		p = this->front;
		this->front = this->front->next;
	}
	delete p;
}

Node * Queue::top(){
	if(IsEmpty()){
		return NULL;
	}
	int value = this->front->value;
	Node *p = this->front;
	while(p->next != NULL)
	{
		if(p->next->value <= value)
			p = p->next;
		else
		{
			this->rear->next = this->front;
			this->rear = p;
			this->front = p->next;
			p->next = NULL;
			p = this->front;
			value = p->value;
		}
	}
	return this->front;
}

void Queue::check(int mval)
{
    Node *p = this->front;
    Node *temp;
    while(p->next != NULL)
    {
        if(p->next->value < mval)
        {
            temp = p->next;
            p->next = p->next->next;
            delete temp;
        }
        //p指向下一个节点
        p = p->next;
    }
}

Queue::~Queue() {
	// TODO Auto-generated destructor stub
	while(!IsEmpty())
	{
		Node *temp;
		temp = this->front;
		this->front= this->front->next;
		delete temp;
	}
}

Queue.h:

/*
 * Queue.h
 *
 *  Created on: 2014年6月15日
 *      Author: vit
 */

#ifndef QUEUE_H_
#define QUEUE_H_

class Node
{
public:
    int value;
    int num;
    Node *next;
    Node()
    {
        this->value = 0;
        this->num = 0;
        this->next = 0;
    }
    Node(int value, Node *next, int num)
    {
        this->value = value;
        this->next = next;
        this->num = num;
    }
};

class Queue
{
public:
    Queue();
    virtual ~Queue();

    //method
    void push(Node *n);
    void pop();
    Node* top();
    bool IsEmpty();
    void check(int mval);

    //member
    Node *front;
    Node *rear;
};
#endif /* QUEUE_H_ */

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列),布布扣,bubuko.com

时间: 2024-10-19 13:27:12

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)的相关文章

数据结构课程设计题目四_二叉树

本文出自:http://blog.csdn.net/svitter 题目4:二叉树 给出一颗无线的二叉树.树的每一个结点用一整数对标识.二叉树构造如下 树根被标识为(1, 1): 如果一个结点被标识为(a, b), 则其左孩子被标识为(a+b,b),右孩子被标识为(a, a+b).现在给出某一结点(a, b),求树根到该结点的最短路径,并且同时求出从树根出发向左走和向右走的次数.建议完成人数1人. 注:此处使用了STL_stack库函数,是不允许的,我图方便. //===============

数据结构——课程设计

  <数据结构课程设计>   课程题目 模拟电话客服管理系统 课程编号 j1620102 学生姓名 吴佳煜 所在专业 信息管理与信息系统 所在班级 信管1133 任课老师 易学明 实习时间 二〇一四年十二月二十五日 设计成绩 老师评语 一.课程设计题目 赵斌是一个信管专业的学生,大学四年顺利毕业了.在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分司的面试通知书,通知他于本月1号10点到公司面试.当天,晴空万里,艳阳高照,他身

数据结构课程设计

20. 公交线路上优化路径的查询  问题描述 最短路径问题是图论中的一个经典问题,其中的Dijkstra算法一直被认为是图论中的好算法,但有的时候需要适当的调整Dijkstra算法才能完成多种不同的优化路径的查询. 对于某城市的公交线路,乘坐公交的顾客希望在这样的线路上实现各种优化路径的查询.设该城市的公交线路的输入格式为: 线路编号:起始站名(该站坐标):经过的站点1名(该站坐标):经过的站点2名(该站坐标):--:经过的站点n名(该站坐标):终点站名(该站坐标).该线路的乘坐价钱.该线路平均

数据结构课程设计之一元多项式的计算

数据结构不是听会的,也不是看会的,是练会的,对于写这么长的代码还是心有余也力不足啊,对于指针的一些操作,也还是不熟练,总出现一些异常错误,对于数据结构掌握还是不够啊,还是要多练,这个课程设计做的还是有点粗糙,还有待改进啊!! 对代码有进行了一下改进,增加了排序的模块:可能还存在着一下小bug,发现了再更新:减法还可以写的更简便一点. <pre name="code" class="cpp">#include <stdio.h> #includ

数据结构课程设计《稀疏矩阵运算器》

最近正在弄数据结构课程设计内容,说实话,感觉自己数据结构学的就是渣,好多东西都不会.还是要多学点东西啊.现在暂且贴点之前写完的东西吧,到时候也好有个总结. 1 诸论 1.1 问题描述 稀疏矩阵是指那些多数元素为零的矩阵.利用"稀疏"特点进行存储和计算可以大大节省存储空间,提高计算准备效率.实现一个能进行稀疏矩阵基本运算的运算器. 1.2 基本要求 以"带行逻辑链接信息"的三元组顺序表示稀疏矩阵,实现两个稀疏矩阵相加.相减.相乘和求逆的运算.稀疏矩阵的输入形式采用三元

背单词系统 数据结构课程设计

     数据结构     课程设计说明书           题目:          轻松背单词   学生姓名:       啦啦啦 学    号:    201406060306      院 (系):    电气与信息工程 专    业:   计算机科学与技术 指导教师: 2016  年  1 月 15 日 目 录 1.设计任务 1 2. 需求分析 1 3. 概要设计 1 3.1 基本功能 1 3.2 函数说明 1 3.3 变量和结构体说明 2 3.4 单词存储简要分析 2 3.5 功能

数据结构课程设计论文--学生信息管理系统

数据结构课程设计论文--学生信息管理系统 1.学生成绩分析问题 (1)问题描述.录入并保存一个班级学生多门课程的成绩,并对成绩进行分析. (2)基本要求.a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat.b)对文件input.dat中的数据进行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出:计算每个人的平均成绩,按平均成绩排序,并生成文件:求出各门课程的平均成绩.最高分.最低分.不及格人数.60~69分人数.70~79分人数.80~89分人数.90分以上

COJ968 WZJ的数据结构(负三十二)

WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有一盏灯,初始均亮着.请你设计一个数据结构,回答M次操作. 1 x:将节点x上的灯拉一次,即亮变灭,灭变亮. 2 x k:询问当前所有亮灯的节点中距离x第k小的距离(注意如果x亮着也算入). 输入 第一行为一个正整数N.第二行到第N行每行三个正整数ui,vi,wi.表示一条树边从ui到vi,距离为wi

我的LabPHP框架的Demo应用——课程设计题目统计系统

1.界面制作(为了方便起见,这里我采用了Bootstrap框架制作界面): 2.数据库设计,正确创建students表: admin表: 3.项目目录结构如下: LaPHP框架已经在上文中列出,这里就不再列出. Home模块(提供"新增题目"和"修改试题".查看所有学生题目的功能): Application/Home/Config/config.php <?php return array( //'配置项'=>'配置值' 'DB_HOST' =>