Windows Message Queue教程
<pre class="has">
/*
题意:和上一题一样就是个优先队列,优先级高的先出队,相同优先级的先来先出队,求出队顺序。
思路:这个只维护一个有顺序的链表,在插入的时候插入适当的顺序。
*/
//Accepted Code:
include <bits/stdc++.h>
using namespace std;
const int MAXN = 100;
struct edge {
int num;
char x[MAXN], y[MAXN];
}ap;
typedef edge ElemType;
typedef struct ListPtr {
ElemType data;
ListPtr *next;
}*lists;
int len;
lists head, tail;
void Alloc(lists &p) {
p = (ListPtr *)malloc(sizeof(ListPtr));
p -> next = NULL;
}
void link() {
len = 0;
Alloc(head);
tail = head;
}
void push(ElemType e) {
lists p, r = head;
Alloc(p);
p -> data = e;
while (r -> next != NULL && e.num >= r -> next -> data.num)
r = r -> next;
p -> next = r -> next;
r -> next = p;
len++;
}
void pop() {
len--;
lists p = head -> next;
head -> next = p -> next;
if (p == tail)
tail = head;
free(p);
}
ElemType front() {
return head -> next -> data;
}
int main() {
int num;
char opt[5], x[MAXN], y[MAXN];
link();
int top = 1;
while (~scanf("%s", opt)) {
if (opt[0] != 'P') {
if (!len)
printf("EMPTY QUEUE!\n");
else {
ap = front();
pop();
printf("%s %s\n", ap.x, ap.y);
}
}
else {
scanf("%s%s%d", ap.x, ap.y, &ap.num);
push(ap);
}
}
return 0;
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »