الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في queue

بدأه طــآلبة حآسب آلي . في 19 مايو 2011 · 15 رد · 1,331 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لو سمحتوا ي اخواني ممكن احد يصحح لي هالكود , ويقول لي ايش الغلط ..؟ هو مايدخل الا عنصر واحد ويقول 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

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 19 مايو 2011 في 17:55

#2

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

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

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

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

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

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

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

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3
#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 اسئلة , فقررت اتابعها بالكيوز افضل عشان افهم للمحاضرة اللي بعدها ..

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

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

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 20 مايو 2011 في 11:15

#4

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

  exit (0);

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

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

if(ITEM == 0)
				 break;

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

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

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

من الأفضل كتابة خيارات تعرض للمستخدم .. يعني 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

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#6

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

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

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

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

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

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 20 مايو 2011 في 16:02

#7

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

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

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

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

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

اقتباس

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

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

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

بالتوفيق .

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#9

mental-driller

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

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

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

#10

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

#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

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

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 20 مايو 2011 في 17:07

#11
 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 .

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

موفقه ,

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#12

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

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

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

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

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#13

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

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

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

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

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

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

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

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

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

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

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

#14

بالضبط

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#15

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

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

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

#16
#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 .. عشان مرة تحذف وتضيف بالثاني ..

مواضيع مشابهة