• 0
غلا نجد

سؤال في queue

سؤال

السسلام عليكم ..

لو سمحتوا ي اخواني ممكن احد يصحح لي هالكود , ويقول لي ايش الغلط ..؟ هو مايدخل الا عنصر واحد ويقول underflow

وفقكم الله .


#include <iostream.h>
struct QUEUE
{ int info;
QUEUE *pNext;
};

QUEUE *rear=NULL, *front=NULL;

class queue
{
private:
int ITEM;

public:
void Enqueue ()
{int ITEM;
cout<<":ENTER ELEMENT ";
cin>>ITEM;
QUEUE *NewNode;
NewNode = new QUEUE;
NewNode->info = ITEM;
NewNode->pNext = NULL;
if (rear == NULL) front = rear= NewNode;
else
{
rear->pNext = NewNode;
rear = NewNode;
}
}


int Dequeue(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return 0;
}

int ITEM = front->info;
if(front == rear ) front=rear=NULL;
else front = front-> pNext;
return(ITEM);
}

void Traverse(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return;
}
QUEUE *f = front;
while(f!=NULL)
{ cout<< f->info<<", ";
f=f->pNext;
}
}
}; // end of the class

int main(void)
{
queue obj; // object creation
obj. Enqueue();
obj. Dequeue();
obj.Traverse();
return 0;
} // end of of main() function

تم تعديل بواسطه طــآلبة حآسب آلي .
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

15 إجابة على هذا السؤال .

  • 0

اختي المشكله عندك ليست في البرنامج وانما في تفسيرك لتنفيذ الكود


obj. Enqueue();
obj. Dequeue();
obj.Traverse();

انظري للتنفيذ هنا اولا قمتي باضافة رقم الى الطابور، تمام؟ تغيرت قيمه المؤشرات ، ثم قمتي بازالة الرقم من الطابور وهذا سوف يعيد قيمة المؤشرات الى NULL

هنا الدالة Traverse سوف تقوم بطباعة underflow

لتصحيح الخطأ غيري ترتيب الاستدعاء


obj.Enqueue();
obj.Traverse();
obj.Dequeue();

بالمناسبة ماذا فعلتي في برنامج الاستاك؟ Stack

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0


#include <iostream.h>
#include <process.h>

struct QUEUE
{ int info;
QUEUE *pNext;
};

QUEUE *rear=NULL, *front=NULL;

class queue
{
private:
int ITEM;

public:
void Enqueue ()
{int ITEM;
// while (1){
cout<<":ENTER ELEMENT ";
cin>>ITEM;
QUEUE *NewNode;
NewNode = new QUEUE;
NewNode->info = ITEM;
NewNode->pNext = NULL;
if (rear == NULL) front = rear= NewNode;
else
{
rear->pNext = NewNode;
rear = NewNode;
}}
// exit (0);
// }


int Dequeue(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return 0;
}

int ITEM = front->info;
if(front == rear ) front=rear=NULL;
else front = front-> pNext;
return(ITEM);
}

void Traverse(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return;
}
QUEUE *f = front;
while(f!=NULL)
{ cout<< f->info<<", ";
f=f->pNext;
}
}
}; // end of the class

int main(void)
{
queue obj; // object creation

obj. Enqueue();
obj.Traverse();
obj. Dequeue();

return 0;
} // end of of main() function

طيب عدلته ,<< كنت اصلا متوقعه هذا الغلط :),

لكنه يسوي مرة وحدة فقط ..

حطيت while loop & exit

يطلع لما الصفر

لكن لما اضغط صفر يكمل ..

-----

شكرا ع السؤال ,, البرامج اللي اسالك عليها self test اختبارت ذاتية تعطينا اياها الدكتورة , وتقول حلوها عشان تفهموا كويس للاختبار ..

وانا احلها بعد كل محاضرة .. لكن بدانا ناخذ queues وبدأت الاختبارات فمو قادرة اانا اتابعها واحل كل شي ,اعطتنا 4 اسئلة , فقررت اتابعها بالكيوز افضل عشان افهم للمحاضرة اللي بعدها ..

,,و يالله الحق احل واذاكر ..

اتركه فترة وارجع له لما تخلص اختباراتي ,,

تم تعديل بواسطه طــآلبة حآسب آلي .
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اذا قصدك يطلع لما المستخدم يدخل صفر من هذا الكود


exit (0);

فهذا الكود يخليكي تطلعي من البرنامج كله، الصفر هنا عبارة عن كود حق الخطأ ، لما تدي له صفر يعني خرج بنجاح

مدري يمكن قصدك


if(ITEM == 0)
break;

اذا مش هذا قصدك وضحي اكثر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ,

من الأفضل كتابة خيارات تعرض للمستخدم .. يعني 1 - للإضافة , 2 - للحذف , 3 - للطباعة , 4 - للخروج .

و تضعينها داخل loop غير منتهية ,

مثال للتوضيح :


while(1)
{
cout<<"Please , Enter Your Choice:"<<endl;
cout<<"1- Enqueue\n2- Dequeue\n3- Traverse\n4- Exit\n";
cin>>ch;
switch (ch){
case 1 :
obj. Enqueue();
break;
case 2 :
obj. Dequeue();
break;
case 3 :
obj.Traverse();
break ;
case 4 :
return 0 ;
default :
cout<<"wrong choices ..\n";
break ; }
}

بالتوفيق ,

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انا ابغيه يسوي اضافة لحد معين ,,

سويته لها بسويتش مثل اشراقة فجر قالت لي لآآ :(

احس غلط اني اسوي اضافة واسوي حذف ماراح يطلع لي بلاخير شي

انا مسويته بسويتش ,

حد يعرف طريقة ثانية انه يضيف كذا مرة العدد وبعدين مثلا يختآر اليوزر العدد اللي يحذفه

تم تعديل بواسطه طــآلبة حآسب آلي .
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل قريتي الرد؟ قلت لك تبعدي الexit

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
انا ابغيه يسوي اضافة لحد معين ,,


for(int i=0 ; i<3 ; i++)
obj. Enqueue();

او تجعلين المجال مفتوح و المستخدم يحدد كم عنصر يريد إدخاله ,

حد يعرف طريقة ثانية انه يضيف كذا مرة العدد وبعدين مثلا يختآر اليوزر العدد اللي يحذفه

تبحثين عن العنصر . في حال وجوده تربطين العنصر الذي يسبقه بالعنصر الذي يليه ,

حاولي تكتبين الكود .. و بنساعدج .

بالتوفيق .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

mental-driller

ايوه قريته ,, . الحين لما يضيف انا مابيه يحذف كل العناصر ..

خلاص انا مسويته بسويتش ..

الحين بجرب احذف عنصر محدد من الكيوز ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا برنامجي بسويتش


#include <iostream.h>
#include <process.h>

struct QUEUE
{ int info;
QUEUE *pNext;
};

QUEUE *rear=NULL, *front=NULL;

class queue
{
private:
int ITEM,choice;

public:
void menue()
{
while( 1 )
{
cout<<" ******* QUEUE ********* \n";
cout<<" \n\n\t ( 1 ) Enqueue \n\t ( 2 ) Dequeue \n";
cout<<"\t ( 3 ) Print queue \n\t ( 4 )dequeue specific value\n\t ( 5 ) Exit.";
cout<<" \n\n\n\t Your choice ---> ";
cin>>choice;
switch(choice)
{
case 1:
cout<<"\n Enter a number: ";
cin>>ITEM;
Enqueue(ITEM);
break;
case 2:
ITEM = Dequeue();
if(ITEM) cout<<" \n Deleted from Q = "<<ITEM<<endl;
break;
case 3:
Traverse();
break;
case 4:

specific_element_de();

break;
case 5:
exit(0);

default:
cout<<"\n\n\t Ininfoid Choice: \n";
} // end of switch block
} // end of while loop
} // end of function


void Enqueue (int ITEM)
{
QUEUE *NewNode;
NewNode = new QUEUE;
NewNode->info = ITEM;
NewNode->pNext = NULL;
if (rear == NULL) front = rear= NewNode;
else
{
rear->pNext = NewNode;
rear = NewNode;
}
}


int Dequeue(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return 0;
}

int ITEM = front->info;
if(front == rear ) front=rear=NULL;
else front = front-> pNext;
return(ITEM);
}

void Traverse(void)
{ if(front == NULL) { cout<<" \n <Underflow> QUEUE is empty\n";
return;
}
QUEUE *f = front;
while(f!=NULL)
{ cout<< f->info<<", ";
f=f->pNext;
}
}
void specific_element_de(){
int item;
cout<<"Enter element that are you want to delete it ";
cin>>item;
for(QUEUE *k;k!=NULL;k=k->pNext)
if(k->info==item)
Dequeue( );
else
cout<<"NO match element";
}



}; // end of the class

int main(void)
{
queue obj; // object creation
obj.menue( );
return 0;
} // end of of main() function

أحس بأني من الاستعجال جبت العيد : (

تم تعديل بواسطه طــآلبة حآسب آلي .
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 void specific_element_de(){
int item;
cout<<"Enter element that are you want to delete it ";
cin>>item;
for(QUEUE *k;k!=NULL;k=k->pNext)
if(k->info==item)
Dequeue( );
else
cout<<"NO match element";

دالة الحذف في الـ Queue , تحذف اول عنصر .. يعني عمل هذه الدالة مثل عمل دالة Dequeue .

تحتاجين لمؤشر يؤشر على العنصر الذي يسبق العنصر المراد حذفه , و مؤشر يؤشر على العنصر التالي للعنصر المراد حذفه . و تربطينهم ببعض . (في حال وجود العنصر )

موفقه ,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كيف تريدين حذف عنصر من وسط الكيو؟

مبدأ عمل الكيو هو FIFO اذا قمتي بتغيير الخاصيه اصبح الكيو عندك linked list

في الحقيقه الكيو والاستاك هما حالات خاصه من linked list

حيث الدخول في اليست عشوائي ، عندما تضيفين قوانين مثل FIFO, LIFO يصبح الليست اما كيو او ستاك حسب ما تحددين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم انا اعرف ,,

لكن الدكتورة عندنا , ماتخلي شي ,,

المادة اللي ادرسها data structure ..

يعني كلهم على علاقة ببعض ..

طيب ابغي اسأل .. كيف نسوي كيو باستخدام الستاك ..

الحقيقة مافهمت السؤال انا زين ؟

تبي تمثيل الكيو باستخدام الستاك ..

وبما ان الكيو هي اول من يدخل او من يخرج

على عكس الستاك اخر من يدخل اول من يخرج ..

بحتاج الى ستاكين ( 2 ستاك ) الاولى اسوي اضافة واحذف منها للستاك الثانية ,,

وبعدين احذف عناصر الستاك الثانية واطبعها صح هيك ولا لا ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالضبط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حلو اني فهمت ..

طيب جاري تنفيذ البرنامجين ,,

ياليت ي اخوان اللي عنده كتب تفيد في فهم الداتا ستركشتر يدلني عليها ,, ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

#include<stdio.h>
#include<conio.h>
#include<process.h>
int in_top=-1;
int out_top=-1;
void in_stack_push(int item);
int in_stack_pop();
void out_stack_push();
int out_stack_pop();
int insert_queue[20],delete_queue[20];

void main()
{
int i,ch,item;
clrscr();
while(1)
{
printf("\n1. Insert");
printf("\n2. Delete");

printf("\nEnter Your Choice:- ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\n\nEnter the Element in Queue:- ");
scanf("%d",&item);
in_stack_push(item);
break;
case 2:
printf("Element Deleted:-%d",out_stack_pop());
break;
default:
printf("Thank You For using queue using two stack");
getche();
exit(0);
}
}
}
void in_stack_push(int item)
{
if(in_top>20)
printf("Queue Full");
else
insert_queue[++in_top]=item;
}
int in_stack_pop()
{
if(in_top>=0)
return insert_queue[in_top--];
}

void out_stack_push()
{
if(in_top==-1)
{
printf("Queue Empty");
}
else
{
while(in_top>=0){
delete_queue[++out_top]=in_stack_pop();
}
}
int out_stack_pop()
{
if(out_top==-1)
{
out_stack_push();
}
if(out_top<0 && in_top<0)
return 0;

if(out_top>=0)
return delete_queue[out_top--];
}

ي أخوان يآليت احد يصحح لي هالكود مايطبق معي صح

عندي خطأ ب

clrscr();

'clrscr' : undeclared identifier

ياليت احد يشوفه لي ,, وش مشكلته . ضروري

لأنه بكرا اختباري ومافهمت تمثيل الكيو صح ؟

البرنامج تمثيل كيو باستخدام الستاك ؟

طبعا ضروري يصير عندك ستاك 2 .. عشان مرة تحذف وتضيف بالثاني ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .