佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1482|回复: 1

C program Circular Queue

[复制链接]
发表于 26-12-2010 11:54 PM | 显示全部楼层 |阅读模式
各位大大幫忙一下,
我要寫一個 Circular Queue 我的問題是: 一開始 insert, 然後 insert 到 full 為之是沒問題,過後我delete 再 insert 就有問題了。

先謝謝各位。。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 5

  4. struct element
  5. {
  6.        int key ;
  7. };

  8. struct MyCircularQueue{
  9.         
  10.     struct element items[MAX] ;               
  11.     int rear ;                                               
  12.     int front ;
  13.     int count;
  14.     bool IsFullQ( )        ;                                       
  15.     bool IsEmptyQ( ) ;                                       
  16.     void AddQ( struct element ) ;               
  17.     struct element DeleteQ( ) ;                       
  18.     void ShowQ( ) ;                                       
  19. } ;

  20. bool MyCircularQueue::IsFullQ()
  21. {
  22.          return rear-front==MAX;
  23. }

  24. bool MyCircularQueue::IsEmptyQ()
  25. {
  26.    
  27.         return front==rear;
  28. }

  29. void MyCircularQueue::AddQ(struct element elements)
  30. {
  31.    
  32.      rear=(rear+1) % MAX;
  33.      items[rear]=elements;
  34. }

  35. struct element MyCircularQueue::DeleteQ()
  36. {
  37.      front=(front+1) % MAX;
  38.      return items[front];

  39. }

  40. void MyCircularQueue::ShowQ()
  41. {
  42.     int flag=front;
  43.     for(;flag<rear;)
  44.     printf("Queue elements: %d\n",items[++flag]);
  45. }
  46. int main()
  47. {
  48.     int choice,stop=0;
  49.     struct MyCircularQueue my_queue;
  50.     struct element elements;
  51.     my_queue.front=-1;
  52.     my_queue.rear=-1;
  53.     while(stop!=1)
  54.     {
  55.         printf("1)Check Queue is it Full\n");
  56.         printf("2)Check Queue is it Empty\n");
  57.         printf("3)Insert element into Queue\n");
  58.         printf("4)Delete element from Queue\n");
  59.         printf("5)Print out all element of Queue\n");
  60.         printf("6)Exit\n");
  61.         printf("Enter your choice:");
  62.         scanf("%d",&choice);
  63.         
  64.         switch(choice)
  65.         {
  66.            case 1:
  67.                 if(my_queue.IsFullQ())
  68.                   printf("\nQueue is full\n\n");
  69.                 else
  70.                   printf("\nQueue not full still can input %d elements\n\n",MAX-1-my_queue.rear);
  71.                 break;
  72.            case 2:
  73.                  if(my_queue.IsEmptyQ())
  74.                   printf("\nQueue is Empty\n\n");
  75.                 else
  76.                   printf("\nGot %d elements in Queue\n\n",my_queue.rear-my_queue.front);
  77.                 break;
  78.            case 3:
  79.                 if(!my_queue.IsFullQ()){
  80.                   printf("\nInsert the elements:");
  81.                   scanf("%d",&(elements.key));
  82.                   my_queue.AddQ(elements);
  83.                 }else
  84.                   printf("\ncannot add any more...\n\n");
  85.                 break;
  86.            case 4:
  87.                 if(!my_queue.IsEmptyQ()){
  88.                   my_queue.DeleteQ();
  89.                 }else
  90.                   printf("\nqueue already empty\n\n");
  91.                 break;
  92.            case 5:
  93.                 my_queue.ShowQ();
  94.                 break;
  95.            case 6:
  96.                 stop++;
  97.                 system("cls");
  98.                 break;
  99.         }
  100.     }
  101. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 30-12-2010 11:45 AM | 显示全部楼层
回复 1# invisible

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "stdafx.h"
  4. #define MAX 5

  5. struct element
  6. {
  7.        int key ;
  8. };

  9. struct MyCircularQueue{
  10.         
  11.     struct element items[MAX] ;               
  12.     int rear ;                                                
  13.     int front ;
  14.         int count;
  15.     bool IsFullQ( )        ;                                       
  16.     bool IsEmptyQ( ) ;                                       
  17.     void AddQ( struct element ) ;               
  18.     struct element DeleteQ( ) ;                        
  19.     void ShowQ( ) ;
  20.         void Initialize();
  21. } ;

  22. void MyCircularQueue::Initialize(){
  23.         front=0;
  24.     rear=0;
  25.         count=0;
  26.         struct element blank_element;
  27.         blank_element.key=0;
  28.         for (int loop=0;loop<MAX;loop++)
  29.                 items[loop]=blank_element;
  30. }

  31. bool MyCircularQueue::IsFullQ()
  32. {
  33.          return count==MAX;
  34. }

  35. bool MyCircularQueue::IsEmptyQ()
  36. {
  37.    
  38.         return count==0;
  39. }

  40. void MyCircularQueue::AddQ(struct element elements)
  41. {
  42.      count++;
  43.      items[rear]=elements;
  44.          rear=(rear+1) % MAX;
  45. }

  46. struct element MyCircularQueue::DeleteQ()
  47. {
  48.          count--;
  49.          struct element retval;
  50.          retval.key = items[front].key; //shadow copy.
  51.          items[front].key = 0;
  52.          front=(front+1) % MAX;
  53.      return retval;

  54. }

  55. void MyCircularQueue::ShowQ()
  56. {
  57.     int flag=front;
  58.     for(int loop=0;loop<MAX;loop++)
  59.     printf("Slot %d,Queue elements: %d\n",loop,items[(front+loop) % MAX]);
  60. }
  61. int _tmain()
  62. {
  63.     int choice,stop=0;
  64.     struct MyCircularQueue my_queue;
  65.    
  66.         //Initialization
  67.         struct element elements;
  68.         my_queue.Initialize();


  69.     while(stop!=1)
  70.     {
  71.         printf("1)Check Queue is it Full\n");
  72.         printf("2)Check Queue is it Empty\n");
  73.         printf("3)Insert element into Queue\n");
  74.         printf("4)Delete element from Queue\n");
  75.         printf("5)Print out all element of Queue\n");
  76.         printf("6)Exit\n");
  77.         printf("Enter your choice:");
  78.         scanf("%d",&choice);
  79.         
  80.         switch(choice)
  81.         {
  82.            case 1:
  83.                 if(my_queue.IsFullQ())
  84.                   printf("\n>>Queue is full\n\n");
  85.                 else
  86.                   printf("\n>>Queue not full still can input %d elements\n\n",MAX-my_queue.count);
  87.                 break;
  88.            case 2:
  89.                  if(my_queue.IsEmptyQ())
  90.                   printf("\n>>Queue is Empty\n\n");
  91.                 else
  92.                   printf("\n>>Got %d elements in Queue\n\n",my_queue.rear-my_queue.front);
  93.                 break;
  94.            case 3:
  95.                 if(!my_queue.IsFullQ()){
  96.                   printf(">>Insert the elements:");
  97.                   scanf("%d",&(elements.key));
  98.                                   printf("\n");
  99.                   my_queue.AddQ(elements);
  100.                 }else
  101.                   printf("\n>>cannot add any more...\n\n");
  102.                 break;
  103.            case 4:
  104.                 if(!my_queue.IsEmptyQ()){
  105.                   my_queue.DeleteQ();
  106.                 }else
  107.                   printf("\n>>queue already empty\n\n");
  108.                 break;
  109.            case 5:
  110.                 my_queue.ShowQ();
  111.                                 printf("\n");
  112.                 break;
  113.            case 6:
  114.                 stop++;
  115.                 //system("cls");
  116.                 break;
  117.         }
  118.     }
  119. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 16-11-2025 05:56 AM , Processed in 0.093263 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表