C#, Queue 사용하기
C# 에서는 Queue 를 제공합니다. Queue 구조에 대한 설명은 생략하고 코드만 설명하겠습니다.
Queue<Int32> m_Queue = new Queue<Int32>; m_Queue.Enqueue(oItem); // 큐에 넣기 item = m_Queue.Dequeue(); // 큐에서 빼기 |
Queue 의 데이터 갯수 정하기
C# 에서 제공하는 Queue의 크기는 무한대입니다. 크기를 정해 놓고 하려면 Queue를 상속하여 새로운 클래스를 만들어야 합니다.
class MyQueue <T> { Queue<T> m_Queue = new Queue<T>(); public Queue<T> oQueue { get { return m_Queue; } set { m_Queue = value; } } int iFixedCount = 100; // 100로 고정 T iLastValue;
public MyQueue(int _count) { iFixedCount = _count; }
public Int32 Count { get{return m_Queue.Count;} }
public void Enqueue(T oItem) { iLastValue = oItem; m_Queue.Enqueue(oItem); if (m_Queue.Count > iFixedCount) m_Queue.Dequeue(); }
public T LastValue { get { return iLastValue; } } } |
입력값에 따라 여러 개의 Queue 로 분리하기
새로 들어 온 값이 최근에 들어온 값보다 10 이상 클 경우 새로운 큐를 만들어
새로운 큐에 데이터를 넣는 예제입니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text;
/*
c#.net의 Queue에 관한 질문입니다.
질문 1 Queue를 생성하게 되면 무한대로 Q의 번지수가 할당이 되는것같은데 100개만 생성하려면 어떻게 해야할까요? 1개의 Q에 100의 공간을 만들고 1번부터 100번까지 다 넣었으면 다시 1번부터 하나씩 덮어쓰는 식으로 하고싶은데 잘 모르겠네요
C#.net에서 제공하는 기본 Queue 컨트롤을 써서 만들고있는데 잘 모르겠네요
질문 2 C#.net을 이용하여 Queue를 생성한 다음 Q에 연속된 숫자들을 집어넣을겁니다. 25342 25343 25344 25345 25347 25349 25350 25352
이런식으로 숫자를 넣을건데 저 숫자들은 다른곳에서 받아서 집어넣을 숫자들입니다. 이 숫자들을 넣으면서 비교를 할건데 새로 Q에 들어올 숫자가 이전의 Q의 숫자와 10 미만 차이가 나면 다음 Q에 저장을 하고 새로들어올 숫자가 10이상이 차이가나면 새로운 Q를 생성하여 그곳에 넣을겁니다.
*/
namespace WATQueue { class MyQueue <T> { Queue<T> m_Queue = new Queue<T>(); public Queue<T> oQueue { get { return m_Queue; } set { m_Queue = value; } } int iFixedCount = 100; T iLastValue;
public MyQueue(int _count) { iFixedCount = _count; }
public Int32 Count { get{return m_Queue.Count;} }
public void Enqueue(T oItem) { iLastValue = oItem; m_Queue.Enqueue(oItem); if (m_Queue.Count > iFixedCount) m_Queue.Dequeue(); }
public T LastValue { get { return iLastValue; } } }
class Program {
static void Main(string[] args) {
// queue 의 리스트 List<MyQueue<Int32>> m_Queues = new List<MyQueue<Int32>>();
// 큐 한개 MyQueue<Int32> m_Queue = new MyQueue<Int32>(100);
// 100 개인지 확인하기 for(int iTemp=0;iTemp<108;iTemp++) { m_Queue.Enqueue(iTemp); }
Console.WriteLine("m_Queue 의 데이터 수: " + m_Queue.Count.ToString()); Console.WriteLine("");
// 큐 입력에 사용할 데이터 Int16[] iData = new Int16[] { 1, 2, 3, 4, 20, 21, 22, 55,100 }; m_Queue.oQueue.Clear(); Console.WriteLine(" 데이터를 넣습니다."); foreach (Int16 iValue in iData) { Console.Write(" " + iValue.ToString()); if(m_Queue.Count == 0) m_Queue.Enqueue(iValue); else { if(m_Queue.LastValue+10 < iValue) { m_Queues.Add(m_Queue);
m_Queue = new MyQueue<Int32>(10);
} else {
} m_Queue.Enqueue(iValue);
} } m_Queues.Add(m_Queue); Console.WriteLine(Environment.NewLine);
Console.WriteLine("총 m_Queue의 수: " + m_Queues.Count.ToString()); foreach (MyQueue<Int32> q in m_Queues) { Console.WriteLine(" m_Queue의 데이터 수: "+ q.Count.ToString());
}
}
} }
|
Queue , List 비교
C# 에서 Queue 와 비슷한 것이 List 인데, List 가 훨씬 막강합니다.
한가지 예로 Queue 의 데이터를 보려면 Enqueue, Dequeue 를 해야만 하지만
List 는 index 를 제공하여 중간중간에 원하는 값을 볼 수 있다.
C# 에서는 Queue 를 제공합니다. Queue 구조에 대한 설명은 생략하고 코드만 설명하겠습니다.
Queue<Int32> m_Queue = new Queue<Int32>; m_Queue.Enqueue(oItem); // 큐에 넣기 item = m_Queue.Dequeue(); // 큐에서 빼기
List<Int32> m_List = new List<Int32>; m_List[0];// 1 번째 데이터 접근 m_List[1];// 2 번째 데이터 접근
|
꼭 Queue 를 사용해야 할 필요가 없다면 List 를 권하고 싶습니다.
'스터디 > C#.NET:자료' 카테고리의 다른 글
C#, 파일 읽어 ListView에 출력 (0) | 2011.05.14 |
---|---|
프로그램 시작 위치 얻기 (1) | 2011.04.29 |
C#, RichTextBox 에서 그림 삽입(파일명, 리소스) (0) | 2011.03.30 |
C# DataGridView 간단하게 필터 기능 사용하기 (6) | 2011.03.29 |
C#, 문자열 암호화, 복호화 예제 (0) | 2011.03.03 |
C# 에서 클래스 비교하기 (0) | 2011.01.31 |
정렬, Aligment 의 Enumeration 사용하기 (0) | 2011.01.23 |
Visual Studio 2005, 2008 환경설정 –줄번호, 단축키 설정 (0) | 2011.01.05 |
C#, 사용자 정의 컨트롤 사용하기 (0) | 2011.01.05 |
C#, 사용자 정의 컨트롤 만들기 (0) | 2011.01.05 |