queue.c
上传用户:bjtelijie
上传日期:2010-01-01
资源大小:87k
文件大小:1k
源码类别:

数学计算

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #define Max 100
  3. void SetNull(front, rear)
  4. int *front, *rear;
  5. {
  6. *front = 0;
  7. *rear = 0;
  8. }
  9. int Empty(front,rear)
  10. int *front, *rear;
  11. {
  12. if(*front == *rear)
  13. return(1);
  14. else
  15. return(0);
  16. }
  17. int EnQueue(q,x,front,rear)
  18. int q[];
  19. int x;
  20. int *front,*rear;
  21. {
  22. *rear = (*rear+1) % Max;
  23. if(*front == *rear)
  24. {
  25. printf("队列发生上溢n");
  26. return(-1);
  27. }
  28. else
  29. {
  30. q[*rear] = x;
  31. return(0);
  32. }
  33. }
  34. int DelQueue(q,y,front,rear)
  35. int q[];
  36. int *y;
  37. int *front,*rear;
  38. {
  39. *front = (*front +1)%Max;
  40. if(*front == *rear)
  41. {
  42. printf("队列发生下溢n");
  43. return(-1);
  44. }
  45. else
  46. {
  47. *y = q[*front];
  48. return(0);
  49. }
  50. }
  51. void main()
  52. {
  53. int q[Max];
  54. int f = 0, r = 0; /*f和r分别对应队列的头和尾在整个队列存储区域的位置*/
  55. int i,x,m,n;
  56. int a;
  57. SetNull(&f,&r); /*清空队列*/
  58. printf("要输入队列的字符个数:n");
  59. scanf("%d",&m);
  60. printf("输入队列的整型数据:n");
  61. for (i=0; i<m; i++)
  62. {
  63. i=i;
  64. scanf("%d",&x);
  65. a = EnQueue(q,x,&f,&r);
  66. if(a == -1)
  67. break;
  68. }
  69. printf("要提出队列的字符个数:");
  70. scanf("%d",&n);
  71. printf("输出从队列中提取的数据:n");
  72. for (i = 0; i<n; i++)
  73. {
  74. if(DelQueue(q,&x,&f,&r) == -1)
  75. break;
  76. printf("%dn",x);
  77. }
  78. if(Empty(&f,&r) == 1)
  79. printf("队列为空");
  80. else
  81. printf("队列中还有%d个数据",(m-n));
  82. }