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

كيف اجعل المصفوفة في ال(queu) دائرية (حلقية).

مغلق
بدأه عصام اليماني في 26 نوفمبر 2005 · 7 رد · 827 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

في البداية اتقدم بالشكر الجزيل لكل القائمين على هذا المنتدى من مشرفين ومشاركين وزوار لهذا المنتدى الذي هو بمثابة مرجع لكل طالب علم.

سؤالي هوكيف يمكن لي ان اجعل المصفوفة في ال(queu) دائرية (حلقية).

ارجو المساعدة...........؟؟؟؟؟؟؟؟؟؟؟؟؟

وشكرا

#2

إذا إنت حابب تعمل الـ Queue دائري

فيجب عليك استخدام اللوائح المترابطة

وهي عبارة عن بنية struct

struct node
{
int x; // Data , 
node * ptr; // pointer to node
};

سلام

تم تعديل هذه المشاركة بواسطة romanof في 2 ديسمبر 2005 في 23:40

#3

ببساطة .. اجعل اخر عقدة (اي اخر سجل ) في الطابور Quequ تشير الى اول عقدة .. و بهذا تكون دائرية

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#4
بنت اليمن كتب:
اجعل اخر عقدة (اي اخر سجل ) في الطابور Quequ تشير الى اول عقدة .. و بهذا تكون دائرية

We may now formalize the algorithms for dealing with queues in a circular array.

· Creating an empty queue: set head = tail = 0.

· Testing if a queue is empty: is head == tail?

· Testing if a queue is full: is (tail + 1) % QSIZE == head?

· Adding an item to a queue: if queue is not full, add item at location tail and set tail = (tail + 1) % QSIZE.

· Removing an item from a queue: if queue is not empty, remove item from location head and set head = (head + 1) % QSIZE.

والكود هايكون كده :rolleyes:

#include "intqueue.h"

BOOL intqueue::Empty() const

{

  return Head == Tail ? TRUE : FALSE;

}



BOOL intqueue::Full() const

{

  return (Tail + 1) % QSize == Head ? TRUE : FALSE;

}



intqueue::intqueue(int queuesize) :

  QSize(queuesize),

  Element(new int[queuesize]),

  Head(0), Tail(0)

{}



intqueue::~intqueue()

{

  delete [] Element;

}



BOOL intqueue::Remove(int& TopElem)

{

  if (!Empty()) {

    TopElem = Element[Head];

    Head = (Head + 1) % QSize;

    return TRUE;

  } else {

    cout << "Queue empty: Remove failed.\n";

    return FALSE;

  }

}
#5

الاخوة والاخوات شكرا على الردود وعلى التفاعل مع الموضوع بس ياليت توضوحو اكثر الى حد الان لم يفتهم لي والاخت هميس كتبت بلغة الس اكيد

ياليت تجيبوا لنل خوارزمية كيف يمشي البرنامج في السي بلس بلس

وعفوا على الازعاج بس يا جماعة والله انا مايوجد لدي كمبيتر والا حاولت لنفسي واوصل اليه إن شاء الله بس انا طالب في كلية الهنسة والوقت الذي معانا في الكلية في المختبر لا يكفي لتطبيق اكثر من برنامجين بالكثير؟؟؟؟؟؟!!!!!!!!!!!!

ارجوكم ساعدونا؟! وانابقدر الاستطاعة سوف ازود المنتدى بعدة مشاريع من اعملي في الوقت القريب إن شاء الله

والسلام

#6

بدايتا عندى two variables

Head and tail

the elements are deleted at the head or retrive it and the the elements are added at the tail

As u see

unsigned int head = 0;
unsigned int tail = size - 1;   //size of the array

template<class T>
void Enqueue(T item) //for enqueue item in the queue
{
 if(count == array.length)  //count is the number of items in container
  cerr<<"queue is full ";
 else
 if( ++tail == array.length)
  tail = 0;
 array[tail] = item;
 ++count;
}

:)

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#7

الاخت بنت اليمن ممكن ولو هو محرج السؤال ان توضحي لي كيف يمكن ان اجعل اخر السجل يشير الى اول السجل ممكن "كود" لو سمحتي

وشكرا

#8

انك تذهب باللنك لست إلى آخر node لديك ولتكن اسمها tail

ومن ثم تؤشر بالمؤشر المرافق معها ( next ) إلى node الأول

tail ->next = head;

هذا الموضوع مغلق.

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