队列实验排队买饭(链式队列)

来源:互联网 发布:单机linux安装hadoop 编辑:程序博客网 时间:2024/06/05 11:38

题目描述

中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是很聪明的,直接奔政通超市,哈哈,确实,政通超市里面也卖饭,有好几种菜,做的比食堂好吃多了,价格也不比食堂贵,并且买菜就送豆浆,吸引了不少童鞋。所以有时吧,人还是很多的,排队是免不了的,悲剧的是超市只有两个收银窗口。

问题是这样的:开始有两队人在排队,现在咱们只研究第一队,现在我们给每个人一个编号,保证编号各不相同,排在前面的人买完饭就走了,有些人挑完饭就排在后面等待付款,还有一些人比较聪明,看到另一个队人比较少,直接离开这个队到另一个队去了。我要问的是队的总人数和某个位置上人的编号。



输入

首先输入一个整数m(m<10000),代表当前有m个人,第二行输入m个数,代表每个人的编号,第三行输入一个整数n(n<10000),代表队列变动和询问一共n次,以后n行,JOIN X表示编号为X(保证与以前的编号不同)的人加入;LEAVE Y表示第Y(Y小于当前队列长度)个位置 上的人离队 ;ASK Z(Z小于当前队列长度)表示询问第Z个位置上的人的编号;FINISH  D表示有D个人买完饭离开了;LENGTH表示询问队列的长度 。保证所有数据在int 范围内.

输出

对每个询问输出相应的答案,每个答案占一行。

示例输入

3
1 2 3
6
JOIN 4
ASK 2
LEAVE 2
LENGTH
FINISH 2
LENGTH

示例输出

2
3
1

#include <stdio.h>#include <stdlib.h>#include <string.h>#define maxsize 10000typedef int element;typedef struct node{   int data;   struct node*next;}node;typedef struct{   node*front;   node*rear;}sq;int intiqueue(sq*s){   s->front=s->rear=(node*)malloc(maxsize*sizeof(node));   if(!s->front)    return -1;    s->front->next=NULL;    return 0;}int inqueue(sq*s,int k){   node*p;   p=(node*)malloc(maxsize*sizeof(node));   if(!p)    return -1;   p->data=k;   p->next=NULL;   s->rear->next=p;   s->rear=p;   return 0;}int Del(sq*s,int k){  node*p,*q;   p=s->front;   q=p->next;   while(k>1)//p=s->front头循环结束恰好到达目标的前一个   {       p=p->next;       q=p->next;       k--;   }   p->next=q->next;   free(q);   return 0;}int main(){    int m,n,x,i,b[maxsize];    char a[10];    node *p,*q;    sq s;    scanf("%d",&m);    intiqueue(&s);    for(i=0;i<=m-1;i++)        {scanf("%d",&b[i]);        inqueue(&s,b[i]);}    scanf("%d",&n);    while(n--)    {        scanf("%s",a);        if(strcmp(a,"JOIN")==0)        {           scanf("%d",&x);           inqueue(&s,x);        }        else if(strcmp(a,"LEAVE")==0)        {           scanf("%d",&x);           Del(&s,x);        }        else if(strcmp(a,"LENGTH")==0)        {           int y=0;           p=s.front->next;           while(p)           {  p=p->next;              y++;           }           printf("%d\n",y);        }        else if(strcmp(a,"ASK")==0)        {           scanf("%d",&x);           q=s.front;           while(x--)           {              q=q->next;           }           printf("%d\n",q->data);        }        else if(strcmp(a,"FINISH")==0)        {           scanf("%d",&x);           while(x--)           { p=s.front->next;             s.front->next=p->next;             free(p);           }        }    }

 

    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 香港恒生银行的编码器丢了怎么办 淘宝拍下订单发货物流不显示怎么办 wish查到仿品审核变慢怎么办 淘宝卖家订单号错误无法修改怎么办 顺丰快递运单号微信扫描取消怎么办 买的王者荣耀号有守护平台怎么办 融e联登录密码错三次怎么办 金融e家u盾密码忘了怎么办 用工行网银转账后想取消交易怎么办 工行融e借没有密码器怎么办 工行融e借密码器丢了怎么办 工行融e联手机登录密码忘记怎么办 领导给员工抱怨工作太烦怎么办 员工抱怨忙的忙死闲的闲死怎么办 爱上骗我进传销的人该怎么办 尚赫辟谷期间吃了东西怎么办 肾结石掉在输尿管里面好痛怎么办 寄的快递快递单号找不到了怎么办 手机停机但是快递是这个号码怎么办 百世通快递卡在一个地方没动怎么办 电信无限流量20g用完了怎么办 至尊宝qq密保手机被更换怎么办 至尊宝账户密保手机被改怎么办 照片放到私密相册找不到了怎么办 出口报关报错境内货源地怎么办? 微信提现未到账交易记录删了怎么办 支付宝忘记密码就可以登陆怎么办 电脑上登陆QQ忘记密码了怎么办? 电脑被管理员限制登录微信了怎么办 快手绑定的手机号丢了登不上怎么办 快手绑定的手机号丢了登不了怎么办 苹果id有手机号不知道密码怎么办 微信号不是手机号不知道密码怎么办 手机发短信说程序发生错误怎么办 派派游戏崇物等级低怎么办 轻微事故没有报警后面有问题怎么办 苹果6sp手机接电话声音小怎么办 用手机号办的移动宽带到期了怎么办 联通忘了宽带的用户名和密码怎么办 宽带联通移机附近没有端口怎么办 电信卡怎么改服务密码忘记了怎么办