Вы находитесь на странице: 1из 6

Thu vien Hoc Lieu Mo Viet Nam module: m33755

Hng i (Queue) v ngn x p (Stack)


Khuyet Danh
This work is produced by Thu vien Hoc Lieu Mo Viet Nam and licensed under the Creative Commons Attribution License

Tm t t n i dung Hng i l m t t p h p trong c th t vo tr c v ra tr c (FIFO). Tng t nh l nh ng ng i mua v tu, h x p thnh m t hng, ng i no vo tr c th s mua tr c v ra tr c. Ngn x p l m t t p h p m th t l vo tr c ra sau hay vo sao ra tr c (LIFO), tng nh m t ch ng a c x p trong nh hng.

1 Hng i (Queue)
Hng i l ki u d li u t t qu n l nh ng ngu n ti nguyn gi i h n. V d , chng ta mu n g i thng i p n m t ti nguyn m ch x l c duy nh t m t thng i p m t l n. Khi chng ta s thi t l p m t hng i thng i p x l cc thng i p theo th t a vo. L p Queue th hi n ki u d li u nh trn, trong b ng 9.4 sau li t k nh ng phng th c v thu c tnh thnh vin.

Phng th c- thu c tnh Synchronized() Count IsReadOnly IsSynchronized SyncRoot

M c ch Phng th c static tr cthread-safe. v m t Queue wrapper

Thu c tnh tr v s thnh ph n trong hng i Thu c tnh xc nh hng i l ch c Thu c tnh xc nh hng i c ng b Thu c tnh tr v i t ng c th c s d ng ng b truy c p Queue.
xem ti p trang sau

Version

1.1: Jan 8, 2011 1:55 pm GMT+7

http://creativecommons.org/licenses/by/3.0/

http://voer.edu.vn/content/m33755/1.1/

Thu vien Hoc Lieu Mo Viet Nam module: m33755

Clear() Clone() Contains() CopyTo() Dequeue() Enqueue() GetEnumerator() Peek() ToArray()

Xa t t c cc thnh ph n trong hng i T o ra m t b n sao Xc nh xem m t thnh ph n c trong m ng. Sao chp nh ng thnh ph n c a hng i n m ngm t chi u t n t i Xa v tr v thnh ph n b t u c a hng i. Thm m t thnh ph n vo hng i. Tr v m t enumerator cho hng i. Tr v ph n t u tin c a hng i v khng xa n. Sao chp nh ng thnh ph n qua m t m ng m i
B ng 1: Nh ng phng th c v thu c tnh c a Queue

Chng ta c th thm nh ng thnh ph n vo trong hng i v i phng th c Enqueue v sau l y chng ra kh i hng i v i Dequeue hay b ng s d ng enumerator. V d sau minh h a vi c s d ng hng i. Example 1 Lm vi c v i hng i. namespace Programming_CSharp { using System; using System.Collections; public class Tester { public static void Main() { Queue intQueue = new Queue(); // a vo trong m ng for(int i=0; i <5; i++) { intQueue.Enqueue(i*5); } // hi n th hng i Console.Write("intQueue values:\t"); PrintValues( intQueue); // xa thnh ph n ra kh i hng i Console.WriteLine("\nDequeue\t{0}", intQueue.Dequeue()); // hi n th hng i Console.Write("intQueue values:\t"); PrintValues(intQueue); // xa thnh ph n kh i hng i Console.WriteLine("\nDequeue\t{0}", intQueue.Dequeue()); // hi n th hng i Console.Write("intQueue values:\t"); PrintValues(intQueue);

http://voer.edu.vn/content/m33755/1.1/

Thu vien Hoc Lieu Mo Viet Nam module: m33755

// Xem thnh ph n u tin trong hng i. Console.WriteLine("\nPeek \t{0}", intQueue.Peek()); // hi n th hng i Console.Write("intQueue values:\t"); PrintValues(intQueue); } public static void PrintValues(IEnumerable myCollection) { IEnumerator myEnumerator = myCollection.GetEnumerator(); while (myEnumerator.MoveNext()) Console.Write("{0} ", myEnumerator.Current); Console.WriteLine(); } } } K t qu : intQueue values: 0 5 10 15 20 Dequeue 0 intQueue values: 5 10 15 20 Dequeue 5 IntQueue values: 10 15 20 Peek 10 IntQueue values: 10 15 20 Trong v d ny ArrayList c thay b ng Queue, chng ta cng c th Enqueue nh ng i t ng do ta nh ngha. Trong trong chng trnh trn u tin ta a 5 s nguyn vo trong hng i theo t t 0 5 10 15 20. Sau khi a vo ta l y ra ph n t u tin l 0 nn hng i cn l i 4 s l 5 10 15 20, l n th hai ta l y ra 5 v ch cn 3 ph n t trong m ng 10 15 20. Cu i cng ta dng phng th c Peek() l ch xem ph n t u hng i ch khng xa chng ra kh i hng i nn k t qu cu i cng hng i v n cn 3 s l 10 15 20. M t i m lu l l p Queue l m t l p c th m c enumerable nn ta c th truy n vo phng th c PrintValues v i ki u tham s khai bo IEnumerable. Vi c chuy n i ny l ng m nh. Trong phng th c PrintValues ta g i phng th c GetEnumerator, nn nh r ng y l phng th c n c a t t c nh ng l p IEnumerable. K t qu l m t i t ng Enumerator c tr v , do chng ta c th s d ng chng li t k t t c nh ng i t ng c trong t p h p.

2 Ngn x p (stack)
Ngn x p l m t t p h p m th t l vo tr c ra sau hay vo sao ra tr c (LIFO), tng nh m t ch ng a c x p trong nh hng. a trn cng t c l a x p sau th c l y ra tr c do v y a n m d i y t c l a a vo u tin s c l y ra sau cng. Hai phng th c chnh cho vi c thm v xa t stack l Push v Pop, ngoi ra ngn x p cng a ra phng th c Peek tng t nh Peek trong hng i. B ng 9.5 sau minh h a cc phng th c v thu c tnh c a l p Stack.

http://voer.edu.vn/content/m33755/1.1/

Thu vien Hoc Lieu Mo Viet Nam module: m33755

Phng th c- thu c tnh Synchronized() Count IsReadOnly IsSynchronized SyncRoot Clear() Clone() Contains() CopyTo() Pop() Push() GetEnumerator() Peek() ToArray()

M c ch Phng th c static tr v m t Stack wrapper c thread-safe. Thu c tnh tr v s thnh ph n trong ngn x p Thu c tnh xc nh ngn x p l ch c Thu c tnh xc nh ngn x p c ng b Thu c tnh tr v i t ng c th c s d ng ng b truy c p Stack. Xa t t c cc thnh ph n trong ngn x p T o ra m t b n sao Xc nh xem m t thnh ph n c trong m ng. Sao chp nh ng thnh ph n c a ngn x p nm ng m t chi u t n t i Xa v tr v ph n t u Stack a m t i t ng vo u ngn x p Tr v m t enumerator cho ngn x p. Tr v ph n t u tin c a ngn x p v khngxa n. Sao chp nh ng thnh ph n qua m t m ng m i
B ng 2: Phng th c v thu c tnh c a l p Stack

Ba l p ArrayList, Queue, v Stack u ch a phng th c n p ch ng CopyTo() v ToArray() d sao chp nh ng thnh ph n c a chng qua m t m ng. Trong tr ng h p c a ngn x p phng th c CopyTo() s chp nh ng thnh ph n c a chng n m ng m t chi u hi n h u, v vi t ch ng ln n i dung c a m ng b t u t i ch m c m ta xc nh n. Phng th c ToArray() tr v m t m ng m i v i nh ng n i dung c a nh ng thnh ph n trong m ng. Example 2 S d ng ki u Stack. namespace Programming_CSharp { using System; using System.Collections; // l p n gi n lu tr public class Tester { static void Main() { Stack intStack = new Stack(); // a vo ngn x p for (int i=0; i < 8; i++) { intStack.Push(i*5); } // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xa ph n t u tin

http://voer.edu.vn/content/m33755/1.1/

Thu vien Hoc Lieu Mo Viet Nam module: m33755

Console.WriteLine("\nPop\t{0}", intStack.Pop()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xa ti p ph n t khc Console.WriteLine("\nPop\t{0}", intStack.Pop()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xem thnh ph n u tin stack Console.WriteLine("\nPeek \t{0}", intStack.Peek()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // khai bo m ng v i 12 ph n t Array targetArray = Array.CreateInstance(typeof(int), 12); for(int i=0; i <=8; i++) { targetArray.SetValue(100*i, i); } } // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xa ph n t u tin Console.WriteLine("\nPop\t{0}", intStack.Pop()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xa ti p ph n t khc Console.WriteLine("\nPop\t{0}", intStack.Pop()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // xem thnh ph n u tin stack Console.WriteLine("\nPeek \t{0}", intStack.Peek()); // hi n th stack Console.Write("intStack values:\t"); PrintValues( intStack ); // khai bo m ng v i 12 ph n t Array targetArray = Array.CreateInstance(typeof(int), 12); for(int i=0; i <=8; i++) { targetArray.SetValue(100*i, i); } // hi n th gi tr c a m ng Console.WriteLine("\nTarget array: "); PrintValues( targetArray ); // chp ton b stack vo m ng t i v tr 6 intStack.CopyTo( targetArray, 6); // hi n th gi tr c a m ng sau copy Console.WriteLine("\nTarget array after copy:");

http://voer.edu.vn/content/m33755/1.1/

Thu vien Hoc Lieu Mo Viet Nam module: m33755

PrintValues( targetArray ); // chp ton b stack vo m ng m i Object[] myArray = intStack.ToArray(); // hi n th gi tr c a m ng m i Console.WriteLine("\nThe new array: "); PrintValues( myArray ); } public static void PrintValues(IEnumerable myCollection) { IEnumerator myEnumerator = myCollection.GetEnumerator(); while (myEnumerator.MoveNext()) Console.Write("{0} ", myEnumerator.Current); Console.WriteLine(); } } } K t qu : intStack values: 35 30 25 20 15 10 5 0 Pop 35 intStack values: 30 25 20 15 10 5 0 Pop 30 intStack values: 25 20 15 10 5 0 Peek 25 intStack values: 25 20 15 10 5 0 Target array: 0 100 200 300 400 500 600 700 800 0 0 0 Target array after copy: 0 100 200 300 400 500 25 20 15 10 5 0 The new array: 25 20 15 10 5 0 K t qu cho th y r ng cc m c c a vo trong ngn x p v c l y ra theo th t LIFO. Trong v d s d ng l p Array nh l l p c s cho t t c cc l p m ng. T o ra m t m ng v i 12 ph n t nguyn b ng cch g i phng th c tnh CreateInstance(). Phng th c ny c hai tham s m t l ki u d li u trong tr ng h p ny l s nguyn int v tham s th hai th hi n kch th c c a m ng. M ng sau c a vo b ng phng th c SetValue() phng th c ny cng l y hai tham s l i t ng c thm vo v v tr c thm vo. Nh k t qu cho ta th y phng th c CopyTo() vi t ch ng ln gi tr c a m ng t v tr th 6. Lu r ng phng th c ToArray() c thi t k tr v m t m ng i t ng do v y m ng myArray c khai bo tng ng. Object[] myArray = myIntStack.ToArray();

http://voer.edu.vn/content/m33755/1.1/

Вам также может понравиться