Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 1620|回复: 1
打印 上一主题 下一主题

C program Circular Queue

[复制链接]

23

主题

0

好友

122

积分

高级会员

Rank: 3Rank: 3Rank: 3

跳转到指定楼层
1#
发表于 2010-12-26 11:56 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. }
复制代码




收藏收藏0

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

2#
发表于 2010-12-27 12:30 AM |只看该作者
因為你的 Array 没有在 delete 的時候重新排好記憶體分配的位置,你可以在 delete 之後执行 showQ 並列出你的 flag 看看就會明白


回复

使用道具 举报

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

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-11-25 07:33 PM , Processed in 0.109788 second(s), 29 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部