গোলং এ সারি কি?

Golam E Sari Ki



Go হল একটি জনপ্রিয় প্রোগ্রামিং ভাষা যা এর দক্ষতা, ব্যবহারের সহজতা এবং অভিযোজনযোগ্যতার জন্য প্রশংসিত। প্রচুর টুলস এবং লাইব্রেরি সহ, Go বিকাশকারীদের শক্তিশালী এবং দক্ষ সফ্টওয়্যার অ্যাপ্লিকেশন তৈরি করার জন্য প্রয়োজনীয় সংস্থান সরবরাহ করে। যদিও গো নেই পুচ্ছ ডেটা স্ট্রাকচার হিসাবে এর স্ট্যান্ডার্ড লাইব্রেরিতে, সেগুলি বিভিন্ন পদ্ধতি ব্যবহার করে প্রয়োগ করা যেতে পারে। আমরা ধারণা সম্পর্কে কথা বলতে হবে পুচ্ছ এবং কিভাবে এই টিউটোরিয়ালে তাদের বাস্তবায়ন করা যায়।

একটি সারি কি?

লেজ ডাটা স্ট্রাকচার যা একটি পূর্বনির্ধারিত ক্রমে উপাদান সংরক্ষণ এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। এটি একটি লিনিয়ার ডেটা স্ট্রাকচার যা একটি স্ট্যাকের অনুরূপ এবং মেনে চলে ফিফো (ফার্স্ট-ইন, ফার্স্ট-আউট) নিয়ম. এটি একটি অপেক্ষমাণ তালিকা বা একটি লাইনের সাথে তুলনা করা যেতে পারে যেখানে প্রথম ব্যক্তিকে প্রথমে পরিষেবা দেওয়া হয়। বিদ্যমান উপাদান সামনে থেকে বাদ দেওয়া হয় কিউ , এবং নতুন উপাদান পিছনে যোগ করা হয়.

গোলংয়ে একটি কিউ বাস্তবায়ন

একটি বাস্তবায়ন কিউ ইন গো সহজ এবং দক্ষ এবং নিম্নলিখিত চারটি পদ্ধতি ব্যবহার করে প্রয়োগ করা যেতে পারে।







1: টুকরা

গো-তে, ক টুকরা একটি গতিশীল অ্যারে যা আকার পরিবর্তন করতে পারে। বাস্তবায়ন করা a কিউ ব্যবহার করে একটি টুকরা , আমরা পিছনে উপাদান যোগ করতে পারেন টুকরা বিল্ট-ইন অ্যাপেন্ড ফাংশন ব্যবহার করে এবং এর সামনে থেকে উপাদানগুলি সরিয়ে ফেলুন টুকরা স্লাইসিং ব্যবহার করে।



এই পদ্ধতিটি তৈরি করা সহজ এবং গো-এর অন্তর্নির্মিত স্লাইসগুলির জন্য ধন্যবাদ যুক্ত এবং স্লাইসিং অপারেশনগুলির জন্য ভাল পারফরম্যান্স সরবরাহ করে। যাইহোক, স্লাইসিং পদ্ধতি, যার মধ্যে উপাদানগুলিকে একটি নতুন অন্তর্নিহিত অ্যারেতে অনুলিপি করা অকার্যকর হয়ে যেতে পারে যদি কিউ প্রসারিত করে এবং বারবার ডিক্যুইং অপারেশনের প্রয়োজন হয়।



নিম্নলিখিত কোড সংজ্ঞায়িত করে কিউ Go এ একটি স্লাইস ব্যবহার করে বাস্তবায়ন।





প্যাকেজ প্রধান

আমদানি 'fmt'

ফাংশন প্রধান ( ) {

কিউ := করা ( [ ] ইন্টারফেস { } , 0 )

কিউ = সংযোজন ( কিউ , 'ইংরেজি' )

কিউ = সংযোজন ( কিউ , 'উর্দু' )

কিউ = সংযোজন ( কিউ , 'গণিত' )

যদি কেবল ( কিউ ) > 0 {

আইটেম := কিউ [ 0 ]

কিউ = কিউ [ 1 : ]

fmt Println ( আইটেম )

}

যদি কেবল ( কিউ ) == 0 {

fmt Println ( 'সারি খালি' )

} অন্য {

fmt Println ( কিউ )

}

}

উপরের গো কোডটি একটি সরল গঠনের জন্য একটি স্লাইস ব্যবহার করে কিউ তথ্য কাঠামো. দ্য সংযোজন() ফাংশন উপাদান সারিবদ্ধ করতে ব্যবহৃত হয় কিউ স্লাইস, এবং একটি স্লাইস অপারেশন যা প্রাথমিক উপাদানটি সরিয়ে দেয় তাদের সারিবদ্ধ করতে ব্যবহৃত হয়। সঙ্গে fmt.Println() , dequeued উপাদান মুদ্রিত হয়. কোড তারপর ব্যবহার করে কেবল() সারিটি খালি কিনা তা নির্ধারণ করার জন্য ফাংশন, এবং যদি এটি থাকে তবে এটি লিখে ' কিউ fmt.Println() ফাংশন ব্যবহার করে খালি আছে।

আউটপুট



2: লিঙ্ক করা তালিকা

তালিকার নিম্নলিখিত নোডে একটি মান এবং একটি পয়েন্টার বহনকারী নোডগুলি একটি লিঙ্কযুক্ত তালিকা তৈরি করে। দুটি পয়েন্টার দিয়ে, একটি তালিকার সামনের দিকে (মাথা) নির্দেশ করে এবং অন্যটি পিছনের (লেজ) দিকে নির্দেশ করে, আমরা একটি বাস্তবায়ন করতে পারি কিউ একটি লিঙ্ক তালিকা ব্যবহার করে। সারি থেকে একটি আইটেম অপসারণ (ডিকুইং) তালিকার সামনের নোডটি অপসারণ করার সাথে সাথে সারিতে একটি আইটেম যোগ করার (সারিবদ্ধ) তালিকার পিছনে একটি নতুন নোড যুক্ত করা জড়িত।

এই পদ্ধতিটি দক্ষ সারিবদ্ধ এবং সারিবদ্ধ ক্রিয়াকলাপগুলির জন্য অনুমতি দেয় কারণ স্লাইস-ভিত্তিক সমাধানের বিপরীতে যেখানে উপাদানগুলি অনুলিপি করতে হবে তার বিপরীতে শুধুমাত্র মাথা এবং লেজ পয়েন্টারগুলি পরিবর্তন করতে হবে।

একটি বাস্তবায়ন করতে একটি লিঙ্ক তালিকা ব্যবহার করুন কিউ নীচের প্রদত্ত কোড ব্যবহার করে:

প্যাকেজ প্রধান

আমদানি 'fmt'

নোড টাইপ করুন গঠন {

মান ইন্টারফেস { }

পরবর্তী * নোড

}

সারি টাইপ করুন গঠন {

মাথা * নোড

লেজ * নোড

}

ফাংশন প্রধান ( ) {

কিউ := এবং কিউ { মাথা : শূন্য , লেজ : শূন্য }

নতুন নোড := এবং নোড { মান : 'ইংরেজি' , পরবর্তী : শূন্য }

কিউ. লেজ = নতুন নোড

কিউ. মাথা = নতুন নোড

নতুন নোড = এবং নোড { মান : 'উর্দু' , পরবর্তী : শূন্য }

কিউ. লেজ . পরবর্তী = নতুন নোড

কিউ. লেজ = নতুন নোড

নতুন নোড = এবং নোড { মান : 'গণিত' , পরবর্তী : শূন্য }

কিউ. লেজ . পরবর্তী = নতুন নোড

কিউ. লেজ = নতুন নোড

যদি কিউ. মাথা != শূন্য {

আইটেম := কিউ. মাথা . মান

কিউ. মাথা = কিউ. মাথা . পরবর্তী

fmt Println ( আইটেম )

}

যদি কিউ. মাথা == শূন্য {

fmt Println ( 'সারি খালি' )

}

}

নোড স্ট্রাকট সারিতে থাকা প্রতিটি আইটেমকে উপস্থাপন করে এবং এতে দুটি ক্ষেত্র রয়েছে: আইটেমের মান সংরক্ষণের জন্য একটি মান ক্ষেত্র এবং সারিতে থাকা পরবর্তী আইটেমটির দিকে নির্দেশ করার জন্য পরবর্তী ক্ষেত্র। সারির কাঠামো যথাক্রমে সারির সামনে এবং পিছনের ট্র্যাক রাখতে মাথা এবং পুচ্ছ বৈশিষ্ট্যগুলি ব্যবহার করে। দ্য লেজ এর প্রথম আইটেমটি প্রধান সম্পত্তি দ্বারা নির্দেশিত হয়, যখন এর শেষ আইটেমটি পুচ্ছ সম্পত্তি দ্বারা নির্দেশিত হয়।

মাথা এবং পুচ্ছ পরামিতি প্রাথমিকভাবে সেট করা হয় শূন্য যখন একটি নতুন কিউ main() ফাংশনে প্রতিষ্ঠিত হয়। মাথা এবং পুচ্ছ পয়েন্টার তিনটি নোড যোগ করার জন্য আপডেট করা হয় কিউ মান সঙ্গে 'ইংরেজি', 'উর্দু', এবং 'গণিত'। দ্য 'ইংরেজি' আইটেম তারপর 'সারিবদ্ধ' (সরানো) এর সামনে থেকে কিউ এর মান প্রদর্শন করে এবং হেড পয়েন্টারকে নিম্নলিখিত নোডে অগ্রসর করে কিউ . ডিকিউ করার পরে, যদি মাথাটি শূন্য হয়ে যায়, এর অর্থ সারিটি খালি এবং বার্তাটি ' কিউ খালি আছে' মুদ্রিত হয়।

আউটপুট

3: কাঠামো

গো-তে, আপনি একটি কাস্টম ডেটা স্ট্রাকচার তৈরি করতে পারেন যাকে বলা হয় গঠন প্রতিনিধিত্ব করতে a কিউ . এই গঠন সংরক্ষণ করার জন্য ক্ষেত্র থাকতে পারে কিউ উপাদান এবং আইটেম যোগ এবং সরানোর পদ্ধতি, সারি খালি কিনা পরীক্ষা করুন এবং বর্তমান সারির আকার পান।

একটি তৈরি করার এই উপায় কিউ ইন গো একটি সুবিধাজনক এবং এনক্যাপসুলেটেড বাস্তবায়ন অফার করে যাতে ব্যবহার করা সহজ পদ্ধতি রয়েছে যা আরও বৈশিষ্ট্য সহ প্রসারিত এবং কাস্টমাইজ করা যেতে পারে। এটি একটি নমনীয় পদ্ধতি যা বাস্তবায়নে পরিবর্তন করতে বা প্রয়োজনে নতুন ক্ষমতা যোগ করার অনুমতি দেয়।

একটি রীতি তৈরি করা গঠন পদ্ধতির সাথে অন্য দুটি উপায়ের তুলনায় অতিরিক্ত কোড লেখা জড়িত, যা জটিলতা বাড়াতে পারে। যাইহোক, এটি বাস্তবায়নের উপর আরো নমনীয়তা এবং নিয়ন্ত্রণ প্রদান করে কিউ .

নিম্নলিখিত উদাহরণটি একটি প্রতিনিধিত্ব করার জন্য একটি ডেটা কাঠামো তৈরি করে দেখায় কিউ যান

প্যাকেজ প্রধান

আমদানি 'fmt'

সারি টাইপ করুন গঠন {
আইটেম [ ] ইন্টারফেস { }
}

ফাংশন ( q * কিউ ) সারিবদ্ধ ( আইটেম ইন্টারফেস { } ) {
q আইটেম = সংযোজন ( q আইটেম , আইটেম )
}

ফাংশন ( q * কিউ ) ডিকিউ ( ) ইন্টারফেস { } {
যদি কেবল ( q আইটেম ) == 0 {
প্রত্যাবর্তন শূন্য
}
আইটেম := q আইটেম [ 0 ]
q আইটেম = q আইটেম [ 1 : ]
প্রত্যাবর্তন আইটেম
}

ফাংশন ( q * কিউ ) খালি ( ) bool {
প্রত্যাবর্তন কেবল ( q আইটেম ) == 0
}

ফাংশন ( q * কিউ ) আকার ( ) int {
প্রত্যাবর্তন কেবল ( q আইটেম )
}


ফাংশন প্রধান ( ) {

কিউ := এবং কিউ { আইটেম : করা ( [ ] ইন্টারফেস { } , 0 ) }

কিউ. সারিবদ্ধ ( 'ইংরেজি' )
কিউ. সারিবদ্ধ ( 'উর্দু' )
কিউ. সারিবদ্ধ ( 'গণিত' )

আইটেম := কিউ. ডিকিউ ( )
fmt Println ( আইটেম )
যদি কিউ. খালি ( ) {
fmt Println ( 'সারি খালি' )
}

আকার := কিউ. আকার ( )
fmt Println ( 'সারির আকার:' , আকার )
}

উপরের কোডে, একটি আইটেম এর মাধ্যমে আইটেমের স্লাইসে যুক্ত করা হয়েছে সারি () পদ্ধতি, যা এটিকে শেষ পর্যন্ত নিয়ে যায় কিউ . অনুসরণ ফার্স্ট-ইন, ফার্স্ট-আউট (FIFO) নীতি, ডিকিউ() পদ্ধতির সামনে থেকে একটি আইটেম লাগে কিউ এবং এটি ফেরত দেয়। আইটেমটির স্লাইসের দৈর্ঘ্য অংশ হিসাবে পরীক্ষা করা হয় খালি() পদ্ধতিটি পরীক্ষা করে দেখুন কিনা কিউ খালি. আইটেম স্লাইস দৈর্ঘ্য ফেরত দ্বারা, আকার() পদ্ধতি বর্তমান প্রদান করে লেজ এর আকার

main() ফাংশন ব্যবহার করে সারি কাঠামো একটি নতুন তৈরি করতে কিউ , এটি উপাদান যোগ করুন, এটি থেকে আইটেম সরান, কিনা তা নির্ধারণ করুন কিউ খালি আছে, এবং এর আকার গণনা করুন।

আউটপুট

4: চ্যানেল

Go-তে, বিল্ট-ইন চ্যানেলের ধরনটি বাস্তবায়ন করতে ব্যবহার করা যেতে পারে কিউ তথ্য কাঠামো. চ্যানেলটি একটি বাফার আকারের সাথে তৈরি করা যেতে পারে যাতে কোনো নির্দিষ্ট সময়ে সারিবদ্ধ উপাদানের সংখ্যা সীমিত করা যায়। একটি উপাদান যোগ করতে কিউ , এটি ব্যবহার করে চ্যানেলে পাঠানো যেতে পারে <- অপারেটর, সারি থেকে একটি উপাদান সরানোর সময়, এটি একই অপারেটর ব্যবহার করে চ্যানেল থেকে গ্রহণ করা যেতে পারে।

এই পদ্ধতিটি এমন পরিস্থিতিতে বেশ কার্যকর হতে পারে যেখানে সমসাময়িক অ্যাক্সেস কিউ প্রয়োজন, কারণ চ্যানেলগুলি সহজাত ব্যবহারের জন্য সহজাতভাবে নিরাপদ।

এটি মনে রাখা গুরুত্বপূর্ণ যে Go চ্যানেলগুলি টাইপ করা হয়েছে। এর মানে হল যে আপনি একটি চ্যানেলের মাধ্যমে শুধুমাত্র একটি নির্দিষ্ট ধরনের মান পাঠাতে পারেন, এবং আপনি শুধুমাত্র চ্যানেল থেকে একই ধরনের মান পেতে পারেন।

এটি একটি নির্মাণের জন্য একটি চ্যানেল ব্যবহার করার একটি চিত্র কিউ গো-তে ডেটা স্ট্রাকচার।

প্যাকেজ প্রধান

আমদানি (
'fmt'
'সময়'
)

সারি টাইপ করুন গঠন {
আইটেম chaninterface { }
}

funcNewQueue ( ) * কিউ {


q := এবং কিউ {

আইটেম : করা ( চ্যান ইন্টারফেস { } ) ,
}
যান q. প্রসেস আইটেম ( )
প্রত্যাবর্তন q
}

ফাংশন ( q * কিউ ) প্রসেস আইটেম ( ) {
জন্য আইটেম := পরিসীমা q. আইটেম {
যদি আইটেম == 'ইংরেজি' {
fmt Println ( 'ডিকিউড:' , আইটেম )
}
}
}


ফাংশন ( q * কিউ ) সারিবদ্ধ ( আইটেম ইন্টারফেস { } ) {

q আইটেম <- আইটেম

}

funcmain ( ) {
কিউ := নতুন সারি ( )

কিউ. সারিবদ্ধ ( 'ইংরেজি' )
কিউ. সারিবদ্ধ ( 'উর্দু' )
কিউ. সারিবদ্ধ ( 'গণিত' )

সময় . ঘুম ( 2 * সময় . দ্বিতীয় )
}

উপরের কোডটি একটি তৈরি করে সারি কাঠামো একটি একক ক্ষেত্র সহ আইটেম যা একটি চ্যানেল ইন্টারফেস{} প্রকার দ্য নতুন সারি() ফাংশন একটি নতুন উদাহরণ তৈরি করে কিউ এবং তার আরম্ভ করে 'আইটেম' একটি নতুন আনবাফার চ্যানেল সহ ক্ষেত্র। এটি ব্যবহার করে সারিতে যোগ করা আইটেমগুলি প্রক্রিয়া করার জন্য একটি নতুন গোরুটিন শুরু করে প্রক্রিয়া আইটেম() ফাংশন দ্য প্রক্রিয়া আইটেম() ফাংশন প্রাপ্ত আইটেম সমান কিনা তা পরীক্ষা করে 'ইংরেজি' এবং শুধুমাত্র সেই আইটেমের জন্য কনসোলে একটি বার্তা প্রিন্ট করে। দ্য সারি () ফাংশনটি সারিতে নতুন আইটেম যোগ করতে ব্যবহৃত হয়।

আউটপুট

উপসংহার

সারি হল গো-তে একটি অপরিহার্য ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট ক্রমে উপাদানগুলি সঞ্চয় এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। একটি বাস্তবায়ন কিউ ইন গো থ্রেড-সেফ, এগুলিকে প্রোগ্রামগুলিতে একযোগে প্রয়োগ করার জন্য একটি আদর্শ পছন্দ করে তোলে। এটি স্লাইস, লিঙ্কযুক্ত তালিকা, কাঠামো এবং চ্যানেল ব্যবহার করে প্রয়োগ করা যেতে পারে। সম্পূর্ণ বিবরণ ইতিমধ্যে উপরে প্রদত্ত নির্দেশিকা প্রদান করা হয়েছে.