uva540 team queue

简介: uva540 team queue
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 1000000#define LOCALtypedefstructnode{
structnode*next;
intdata;
} node;
typedefstructteam_node{
node*head;
node*rear;
structteam_node*next;
}team_node;
intteam[MAXN];
intnum_team;
voidinit(team_node**head);
voidenqueue(team_node**head, team_node**tail, intelement);
intsearch_team(int*team, intelement);
intdequeue(team_node**head);
intmain()
{
team_node*head=NULL;
team_node*tail=NULL;
intnum;
intno;
inti, j;
charbuf[10];
intelement;
inttests=0;
#ifndef LOCALfreopen("c://uva_in.txt", "r", stdin);
#endifwhile(scanf("%d", &num_team) &&num_team!=0)
    {
memset(team, -1, sizeof(team));
for(i=0; i<num_team; i++)
        {
scanf("%d", &num);
for(j=0; j<num; j++)
            {
scanf("%d", &no);
team[no] =i;
            }
        }
head= (team_node*)malloc(sizeof(structteam_node));
init(&head);
tail=NULL;
printf("Scenario #%d/n", ++tests);
while(scanf("%s", buf) &&strcmp(buf, "STOP") !=0)
        {
if(strcmp(buf,"ENQUEUE") ==0)
            {
scanf("%d", &element);
enqueue(&head, &tail, element);
            } 
else            {
element=dequeue(&head);
printf("%d/n", element);
            }
        }
printf("\n");
    }
return0;
}
voidinit(team_node**head)
{
    (*head)->next=NULL;
    (*head)->head= (*head)->rear=NULL;
}
voidenqueue(team_node**head, team_node**tail, intelement)
{
team_node*p;
node*q;
intteam1, team2;
intdata;
intflag;
if ((*head)->next==NULL)
    {
q= (node*)malloc(sizeof(structnode));
q->data=element;
q->next=NULL;
p= (team_node*)malloc(sizeof(structteam_node));
p->next=NULL;
p->head=p->rear= (node*)malloc(sizeof(structnode));
p->rear->next=q;
p->rear=q;
        (*head)->next=p;
*tail=p;
    }
else    {
flag=0p= (*head)->next;
while(p)
        {
data=p->head->next->data;
team1=search_team(team, data);
team2=search_team(team,  element);
if(team1==team2)
            {
q= (node*)malloc(sizeof(structnode));
q->data=element;
q->next=NULL;
p->rear->next=q;
p->rear=q;
flag=1;
break;
            }
elsep=p->next;
        }
if (!flag)
        {
q= (node*)malloc(sizeof(structnode));
q->data=element;
q->next=NULL;
p= (team_node*)malloc(sizeof(structteam_node));
p->next=NULL;
p->head=p->rear= (node*)malloc(sizeof(structnode));
p->rear->next=q;
p->rear=q;
            (*tail)->next=p;
*tail=p;
        }
    }
}
intsearch_team(int*team, intelement)
{
returnteam[element];
}
intdequeue(team_node**head)
{
team_node*p;
node*q;
intdata;
p= (*head)->next;
q=p->head->next;
data=q->data;
p->head->next=q->next;
free(q);
if(p->rear==q)
    {
p->rear=p->head;
        (*head)->next=p->next;
free(p->rear);
free(p);
    }
returndata;
}
目录
相关文章
|
机器学习/深度学习 算法 决策智能
【5分钟Paper】Pointer Network指针网络
【5分钟Paper】Pointer Network指针网络
632 0
【5分钟Paper】Pointer Network指针网络
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
470 4
|
Arthas Java 测试技术
记一次使用 Arthas 热更新线上代码
引用参考第二条 - Arthas提醒您:诊断千万条,规范第一条,热更不规范,同事两行泪
2395 0
记一次使用 Arthas 热更新线上代码
|
安全 算法 量子技术
【HTTPS】中间人攻击和证书的验证
【HTTPS】中间人攻击和证书的验证
255 1
|
11月前
|
存储 缓存 Oracle
Java线程池,白话文vs八股文,原来是这么回事!
本文介绍了Java线程池的原理、实现方式及相关参数。首先,通过类比公司员工的方式解释了线程池的核心概念,如核心线程、最大线程数、任务队列和拒绝策略。接着,详细描述了线程池的任务处理流程,并提供了使用`ThreadPoolExecutor`和`Executors`创建线程池的代码示例,强调了`ThreadPoolExecutor`的灵活性和`Executors`的局限性。最后,总结了线程池的相关参数及不同类型的线程池实现,并附带常见面试题及其解答,帮助读者全面理解线程池的应用场景和优化方法。
147 4
【Typora】如何使用Markdown插入一段文字,部分左对齐,部分右对齐
如何在Markdown编辑器Typora中使用HTML语法实现同一行内文字的左对齐和右对齐布局。
870 1
|
存储 缓存 Java
Java零基础教学(13):自动拆箱与自动装箱详解
【8月更文挑战第13天】Java零基础教学篇,手把手实践教学!
189 1
Java零基础教学(13):自动拆箱与自动装箱详解
|
机器学习/深度学习 算法 数据建模
决策树(Decision Tree)算法详解及python实现
决策树(Decision Tree)算法详解及python实现
2717 0
决策树(Decision Tree)算法详解及python实现
|
编译器 索引 Python
Pandas之DataFrame,快速入门,迅速掌握(一)
Pandas之DataFrame,快速入门,迅速掌握(一)
822 0
|
监控 NoSQL 物联网
分享78个C++源码,总有一款适合您
分享78个C++源码,总有一款适合您
367 1
分享78个C++源码,总有一款适合您