ക്യൂ (ഡാറ്റാ സ്ട്രക്ച്ചർ)
പുതിയ അംഗങ്ങളെ പിന്നിൽ ചേർക്കുക, നിലവിലുള്ള അംഗങ്ങളെ മുൻഭാഗത്തുനിന്ന് നീക്കുക എന്നീ രണ്ട് പ്രക്രിയകൾ മാത്രം അനുവദിക്കുന്ന ഡാറ്റാ സ്ട്രക്ച്ചറാണ് ക്യൂ. സാധാരണ ടിക്കറ്റിനും മറ്റും ജനങ്ങൾ ക്യൂ നിൽക്കുന്നതിന് സമാനമാണ് ഇതിന്റെ പ്രവർത്തനം. ക്യൂവിൽ ആദ്യം ചേർക്കപ്പെടുന്ന അംഗങ്ങളാണ് ആദ്യം നീക്കം ചെയ്യപ്പെടുക എന്നതിനാൽ ഇതിനെ ഫസ്റ്റ്-ഇൻ-ഫസ്റ്റ്-ഔട്ട് (FIFO) ഡാറ്റാ സ്ട്രക്ചർ എന്നു വിളിക്കുന്നു. ഒരു രേഖീയ ഡാറ്റാ സ്ട്രക്ച്ചറാണ് ഇത്.
ഉപയോഗം
[തിരുത്തുക]കൈവരുന്ന ക്രമത്തിൽ അംഗങ്ങളുടെമേൽ പ്രോസസ്സിങ്ങ് നടത്തേണ്ട ഘട്ടങ്ങളിലെല്ലാം ക്യൂ ആണ് ഉപയോഗിക്കുക. ഉദാഹരണമായി, രണ്ട് കംപ്യൂട്ടറുകൾ തമ്മിലുള്ള ആശയവിനിമയത്തിന്റെ കാര്യമെടുക്കുക. ഒരു കംപ്യൂട്ടറിൽ നിന്ന് മറ്റൊന്നിലേക്ക് അയക്കേണ്ട ബൈറ്റുകളെല്ലാം ഒരു ബഫറിന്റെ രൂപത്തിൽ സൂക്ഷിച്ച് ഒന്നിനു പിറകെ ഒന്നായി അയക്കുകയാണ് ചെയ്യുന്നത്. ഇവിടെ ആദ്യം ലഭിക്കുന്ന ബൈറ്റുകളാണ് ആദ്യം അയക്കേണ്ടത് എന്നതിനാൽ ബഫർ ഒരു ക്യൂവിന്റെ രൂപത്തിലായിരിക്കണം.
ക്യൂ ഉപയോഗിച്ച് പ്രോസസ്സിങ്ങ് നടത്തേണ്ടത് ആവശ്യമുള്ള അൽഗൊരിതങ്ങൾ ഉണ്ട്. ഗ്രാഫുകളിൽ ഉപയോഗിക്കുന്ന ബ്രെഡ്ത് ഫസ്റ്റ് സർച്ച് ആണ് ഒരുദാഹരണം. ഇതിൽ ആദ്യം കാണുന്ന ശീർഷങ്ങളെയാണ് ആദ്യം പ്രോസസ് ചെയ്യേണ്ടത് എന്നതിനാൽ ശീർഷങ്ങളെ ഒരു ക്യൂവിൽ സൂക്ഷിക്കുന്നു.
സി++ സ്റ്റാൻഡേർഡ് ടെംപ്ലേറ്റ് ലൈബ്രറി
[തിരുത്തുക]സി++ സ്റ്റാൻഡേർഡ് ടെംപ്ലേറ്റ് ലൈബ്രറിയുടെ ഭാഗമായി ക്യൂ എന്ന ടെംപ്ലേറ്റ് ഉണ്ട്[1]. ഇത് ഒരു കണ്ടെയ്നർ അഡാപ്റ്റർ ആണ്. queue എന്ന ഹെഡർ ഫയലിലാണ് ഇത് നിർവ്വചിക്കപ്പെട്ടിരിക്കുന്നത്. ഇതിലെ പ്രധാന ഫങ്ഷനുകൾ ഇവയാണ്:
- void push(T&) : പുതിയ ഒരംഗത്തെ ക്യൂവിന്റെ പിന്നിലേക്ക് ചേർക്കുക
- void pop() : ക്യൂവിന്റെ മുൻഭാഗത്തെ അംഗത്തെ നീക്കുക
- T& front() : ക്യൂവിന്റെ മുൻഭാഗത്തെ അംഗത്തെ റിട്ടേൺ ചെയ്യുക
- bool empty() : ക്യൂ ശൂന്യമാണോ അല്ലയോ എന്ന് പറയുക
ഉദാഹരണം
[തിരുത്തുക]സ്റ്റാൻഡേർഡ് ടെംപ്ലേറ്റ് ലൈബ്രറിയിലെ ക്യൂ ഉപയോഗിക്കുന്ന ഒരു പ്രോഗ്രാം ഭാഗം:
queue<int> theQueue; // സംഖ്യകൾക്കായുള്ള ക്യൂ നിർമ്മിക്കുക
theQueue.push(1); // ക്യൂവിന്റെ ഇപ്പോഴത്തെ രൂപം : 1
theQueue.push(2); // ക്യൂവിന്റെ ഇപ്പോഴത്തെ രൂപം : 1 2
theQueue.push(3); // ക്യൂവിന്റെ ഇപ്പോഴത്തെ രൂപം : 1 2 3
while( !theQueue.empty() ) // ക്യൂവിൽ അംഗങ്ങൾ ഉള്ളിടത്തോളം
{
cout << theQueue.front() << endl; // ക്യൂവിന്റെ മുൻഭാഗത്തെ അംഗത്തെ ഔട്പുട്ട് ചെയ്യുക
theQueue.pop(); // ക്യൂവിന്റെ മുൻഭാഗത്തെ അംഗത്തെ നീക്കുക
}
ഇതിന്റെ ഔട്പുട്ട് ഇപ്രകാരമായിരിക്കും:
1 2 3