-
راهنمايي>> صف (Queue)
سلام
چرا وقتي به صف ام عدد اضافه مي كنم طبق ظرفيت 5 تايي كه براش تعيين شده پر نميشه و درواقع يكي كمتر از ظرفيت وافعي پر ميشه و بعد پيغام پر بودن رو ميدهد!!!
[html]
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#define size 5
class queue
{
public:
queue();
int empty();
void display();
void addq(int);
private:
int front;
int rear;
int queue[size];
};
queue::queue()
{
front=rear=0;
}
int queue::empty()
{
if(rear==front)
return 1;
return 0;
}
void queue::display()
{
int i;
if(front<rear)
{
for(i=front;i<rear;i++)
{
cout<<queue[i]<<" ";
}
}
else if(front>=rear)
{
for(i=front;i<size;i++)
cout<<queue[i]<<" ";
}
getch();
}
void queue::addq(int a)
{
int r;
r=(rear+1)%size;
if(front==r)
{
cout<<"Queue Is Full.";
}
else
{
queue[rear]=a;
rear=r;
}
getch();
}
int menu();
int main()
{
queue q;
int a;
while(1)
{
clrscr();
switch(menu())
{
case 1:
cout<<"Add Queue:";
cin>>a;
q.addq(a);
break;
case 2:
q.display();
break;
case 4:
exit(1);
}
}
}
int menu()
{
int x;
cout<<"1) Add To Queue.\n";
cout<<"2) Show Queue.\n";
cout<<"4) Exit.\n";
cout<<"Choice NUM 1-4: ";
cin>>x;
return x;
}
[/html]
-
مشکل برنامه ات اینجاست.خط چهارم.. r = (rear + 1) % size;
[HTML]void queue::addq(int a)
{
int r;
r = (rear + 1) % size;
if(front==r)
{
cout<<"Queue Is Full.";
}
else
{
queue[rear]=a;
rear=r;
}
getch();
}[/HTML]
وقتی پنجمین مقدار رو می زنی چون از صفر شروع کردی پس مقداری که داری ۴ که بعلاوه ۱ میشه ۵ و باقیمانده اش با خود پنچ (سایز)هم میشه صفر که میره در متغیر r.بعد هم توی شرطت این مقدار مساوی با front ی میشه که هنوز مقدارش صفره.برای همین هم پیغام میده که صف پره.
-
هر چي كلنجار رفتم درست نميشه!
نميشه كه جاي front رو تغيير داد!