优先队列的实例题

本文展示了一种按总成绩从高到低并考虑语文成绩优先级的方式对学生信息进行排序的方法,通过C++实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  显示学生信息(学号、姓名、语文、数学),条件是:总成绩由高到低,当总成绩相同时,语文成绩高者优先。

#include<iostream>
#include<queue>
#include<string>
using namespace std;

class Student
{
int No;
string name;
int chinese;
int math;
public:
Student(int s_no,string s_name,int s_chinese,int s_math):
No(s_no),name(s_name),chinese(s_chinese),math(s_math)
{

}
int GetNo()
{
return No;
}
string GetName()
{
return name;
}
int GetChinese()
{
return chinese;
}
int GetMath()
{
return math;
}
bool operator<(const Student& s)const
{
int sum1=chinese+math;
int chinese1=s.chinese;
int math1=s.math;
int sum2=chinese1+math1;
if(sum1<sum2) return true;
if((sum1==sum2)&&(chinese<chinese1)) return true;
return false;
}
};
void main()
{
Student s[]={
Student(1001,"zhang",70,80),
Student(1002,"li",80,70),
Student(1003,"wang",90,85),
Student(1004,"zhao",85,75)
};
priority_queue<Student>pr(s,s+4);
cout<<"成绩由高到低(当相同时,语文高优先):"<<endl;
cout<<"学号\t姓名\t语文\t数学"<<endl;
while(!pr.empty())
{
Student& t=pr.top();
cout<<t.GetNo()<<"\t"<<t.GetName()<<"\t"<<t.GetChinese()<<"\t"<<t.GetMath()<<endl;
pr.pop();
}
}

转载于:https://www.cnblogs.com/zdblog/p/3630863.html

<think>嗯,用户想了解栈和队列的数据结构概念及其应用场景,可能是为了考试或者写论述题答案。首先,我需要回忆栈和队列的基本定义,确保概念准确。栈是后进先出(LIFO)的结构,队列是先进先出(FIFO)的。然后要比较它们的异同,比如操作上的区别,比如栈的push和pop在顶端,队列的enqueue和dequeue分别在尾和头。 接下来是应用场景,栈的应用比如函数调用堆栈、括号匹配、撤销操作;队列的应用比如任务调度、缓冲处理、广度优先搜索。需要具体例子,比如操作系统中的进程调度用队列,编辑器里的撤销用栈。这部分要结合用户提供的引用,比如引用[2]提到数据存储技术,可能可以关联到际应用中的现。 用户提供的引用里,引用[1]提到数据结构题目详解,可能需要注意常见错误,比如栈溢出或者队列空的情况处理。引用[3]讲线程超时,可能和队列在任务调度中的应用有关联,但不确定是否直接相关,可能需要谨慎引用。 还要确保回答结构清晰,分点论述。可能用户需要简答和论述两种形式,所以先给出概念,再比较异同,最后详细的应用场景。代码示例部分,用户给的例子是Python,所以用Python现栈和队列的基本操作,比如用列表现,但要注意线程安全或者效率问题,比如用collections.deque队列更高效。 需要检查LaTeX格式是否正确,所有行内公式用$...$,独立公式用$$...$$。比如栈的操作复杂度是$O(1)$,队列的也是$O(1)$,但循环队列可能需要数现。这部分可能需要数学表达式,但用户示例中没有复杂的公式,保持简洁。 最后生相关问题,要围绕栈和队列的扩展,比如现方式、应用例、复杂度分析等。确保问题有助于用户进一步学习或考试准备。注意引用标识要自然添加,比如在讨论括号匹配时引用[^1]的常见错误,或者在数据存储现时引用[^2]。 现在整理回答结构,先定义栈和队列,再比较,接着应用场景,代码示例,最后相关问题。确保每个部分都准确,并且引用恰当的地方。</think>### 栈和队列的概念及应用场景 #### 1. **数据结构概念** - **栈(Stack)**: 栈是一种**后进先出(LIFO)**的线性数据结构,仅允许在**同一端(栈顶)**进行插入(`push`)和删除(`pop`)操作。其核心特性为: - 基本操作时间复杂度为$O(1)$; - 典型应用包括函数调用栈、表达式求值、括号匹配等。 - **队列(Queue)**: 队列是一种**先进先出(FIFO)**的线性数据结构,插入操作(`enqueue`)在**队尾**进行,删除操作(`dequeue`)在**队头**进行。其特点为: - 基本操作时间复杂度为$O(1)$; - 应用场景如任务调度、消息队列、广度优先搜索(BFS)等。 #### 2. **栈与队列的对比** | 特性 | 栈 | 队列 | |--------------|------------------------|--------------------------| | 操作端 | 仅栈顶 | 队头(删除)、队尾(插入)| | 数据顺序 | LIFO | FIFO | | 典型问题 | 递归现、撤销操作 | 多线程任务分发、缓冲处理 | #### 3. **应用场景详解** - **栈的典型应用**: - **函数调用栈**:程序执行时保存函数调用上下文,确保返回地址和局部变量的正确性[^1]; - **括号匹配**:通过栈检测表达式中的括号嵌套合法性,例如`((a+b)*c)`; - **撤销操作(Undo)**:编辑器通过栈记录操作历史,支持反向回退。 - **队列的典型应用**: - **任务调度**:操作系统使用队列管理进程的就绪状态,确保公平性(如轮转调度)[^3]; - **消息队列**:分布式系统中异步处理请求,解耦生产者和消费者; - **广度优先搜索(BFS)**:遍历图或树时,按层级访问节点。 #### 4. **代码示例** **栈的现(Python)**: ```python class Stack: def __init__(self): self.items = [] def push(self, x): self.items.append(x) def pop(self): return self.items.pop() if self.items else None def is_empty(self): return len(self.items) == 0 ``` **队列现(Python)**: ```python from collections import deque class Queue: def __init__(self): self.items = deque() def enqueue(self, x): self.items.append(x) def dequeue(self): return self.items.popleft() if self.items else None ``` #### 5. **关键问题与扩展** - **栈溢出**:递归过深可能导致栈空间耗尽,需注意递归终止条件; - **循环队列**:通过固定长度数和指针队列,避免数据迁移的开销; - **线程安全队列**:多线程环境下需使用锁或原子操作保证一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值