数据结构——队列的使用(二)

落日映苍穹つ 2022-07-11 13:43 183阅读 0赞

AOJ ALDS1_3_B:Queue(可怜的我AOJ打不开,题目只能拍下来了..)

这个题目瞎bb的比较繁琐,大概意思就是——(举个例子)

规定一个人只能用100块耗时100秒,但是第一个人要用150,所以他用了100之后,拿着剩下的50到最后一个排队用去了。

第二个人只有80,所以他用完了就可以走了,但是他一共耗费了100秒+80秒=180秒。

20170131151621101

20170131151612583

这道题精妙在使用了环形缓冲区(使之不会超出内存)。

20170131151552254

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define LEN 100005
  4. typedef struct pp
  5. {
  6. char name[100];
  7. int t;
  8. }p;
  9. p Q[LEN];
  10. int head,tail,n;
  11. void enqueue(p x)//向队列添加新元素
  12. {
  13. Q[tail]=x;
  14. tail=(tail+1)%LEN;
  15. }
  16. p dequeue()//从队列开头取出元素
  17. {
  18. p x=Q[head];
  19. head=(head+1)%LEN;
  20. return x;
  21. }
  22. int min(int a,int b)
  23. {
  24. return a<b?a:b;
  25. }
  26. int main()
  27. {
  28. int elaps=0,c;
  29. int i,q;
  30. p u;
  31. scanf("%d %d",&n,&q);
  32. for(i=1;i<=n;i++)
  33. {//按顺序将所有人物添加至队列
  34. scanf("%s",Q[i].name);
  35. scanf("%d",&Q[i].t);
  36. }
  37. head=1;tail=n+1;
  38. while(head!=tail)
  39. {
  40. u=dequeue();
  41. c=min(q,u.t);//执行时间片q或所需时间u.t的处理
  42. u.t-=c;//所剩时间
  43. elaps+=c;//累计已用时间
  44. if(u.t>0)//如果处理尚未结束则重新添加至队列
  45. enqueue(u);
  46. else
  47. printf("%s %d\n",u.name,elaps);
  48. }
  49. return 0;
  50. }

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 基本操作 数据结构

    队列(queue)也是线性表的一种特殊情况,其所有的插入均限定在表的一端进行,而所有的删除则限定在表的另一端进行。允许插入的一端称队尾(rear),允许删除的一端称队头(fro

    相关 数据结构——使用

    TOJ 4368 描述 请你定义一个队列,可以对队列进行“入队”、“出队”、“队列输出”等操作。键盘输入一些命令,可以执行上述操作。本题中,队列中元素均为整数。队列的最大元