분류 전체보기
-
Queue<T> 의 구현C# 예제 공부일기 2020. 7. 14. 19:36
선입선출 (Fast-in-first-out, FIFO) 형태의 자료를 다룰 때는 큐를 사용한다. 선착순으로 제일 먼저 들어온 자료가 제일 먼저 나가는 자료구조이다. 큐에 저장되는 값이 여러가지 일 수 있으므로 제네릭으로 정의하고, MyQueue 클래스에는 큐의 맨 앞과 맨 뒤를 가지는 first와 last필드를 갖는다. 각각의 자료는 Node 에 저장되고 MyQueue 클래스에서는 값을 추가하는 EnQueue와 DeQueue가 있다. 필드 또는 메소드 내용 first 큐의 첫번째 요소 가장 먼저들어온 데이터 last 큐의 가장 마지막 요소 가장 마지막에 들어온 데이터 EnQueue() 큐에 값을 추가한다. DeQueue() 큐에 값을 삭제한다. Print() 큐의 내용을 입력된 순서로 출력한다. usin..
-
스택을 이용한 프로그램C# 예제 공부일기 2020. 7. 14. 19:04
10개의 랜덤 숫자를 스택에 넣고 다시 꺼내어 출력하는 프로그램을 작성한다. 스택에 값을 저장할 때는 push(), 꺼낼 때는 pop()을 사용한다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StackPractice { class MyStack { const int maxSize = 10; private T[] arr = new T[maxSize]; private int top; public MyStack() { top = 0; } public void Push(T val) { if (top0) { --top; return..
-
Stack<T>의 구현C# 예제 공부일기 2020. 7. 14. 18:58
후입선출(Last-in-first-out, LIFO) 형태의 자료를 다룰 때는 스택을 사용한다. 제일 나중에 들어온 자료가 제일 먼저 나가는 자료구조이다. C# 컬렉션에는 Stack가 있어서 스택이 필요하면 제공되는 Stack를 쓰면 된다. 스택에 저장되는 값이 여러가지 일 수 있으므로 제네릭으로 정의한다. Mystack 클래스에는 10개의 자료를 저장하는 arr] 배열과 스택 포인터 top이 필드로 정의된다. 메소드는 생성자 메소드와 Push(), POP() 메소드가 있다. 필드 또는 메소드 내용 T arr[] 스택을 구성하는 배열 int top 스택포인터 MyStack() 생성자 top을 0으로 만든다 Push(T val) 스택에 val을 저장한다. T Pop() 스택에서 값을 하나 꺼낸다. usin..
-
LinkedList 클래스를 활용한 프로그램C# 예제 공부일기 2020. 7. 13. 20:44
앞에서 만든 LinkedList 클래스를 이용하여 삽입, 삭제, 출력하는 프로그램 using System; using System.ComponentModel; namespace CPractice { class Node { internal int data; internal Node next; public Node(int data) { this.data = data; next = null; } } class LinkedList { Node head; internal void InsertFront(int data) { Node node = new Node(data); node.next = head; head = node; } internal void InsertLast(int data) { Node node ..
-
LinkedList의 구현C# 예제 공부일기 2020. 7. 13. 20:27
List나 LinkedList 클래스는 C#에서 컬렉션으로 제공하고 있다. 하지만 자료구조를 직접 만드는 것이 프로그램 공부에 도움이 된다는 설명으로 책에서 시킨다. LinkedList에 대한 자세한 설명은 검색 LinkedList 클래스를 별도의 파일로 만들어 놓고 계속 쓸 예정이다. Node 클래스의 필드와 메소드 필드 또는 메소드 내용 int data 노드에 저장되는 값 Node next 리스트에서 디음에 연결되는 노드입니다. Node(int data) Node클래스의 생성자. data를 저장하는 Node를 생성 LinkedList 클래스의 필드와 메소드 필드 또는 메소드 내용 Node head 리스트의 첫 번째 노드 void InsertFront(int data) 리스트의 맨 앞에 data를 추가..
-
dynamic 형을 사용하는 일반화 프로그램C# 예제 공부일기 2020. 7. 13. 19:29
C#은 강력한 형식 검사를 하는 언어이다. 앞에서 사용한 일반화 클래스에서 로 정의된 값들은 더하거나 비교하는 부분에서 컴파일 시에 에러 메시지가 나옵니다. 왜냐하면 는 사용자가 만든 클래스를 포함해서 어떠한 자료형도 올 수 있는데 이 자료들이 더하고나 비교할 수 있는 데이터인지 알 수 없기 때문이다,. 이 문제를 dynamic 키워드로 처리 가능하다. dynamic 형은 형식 검사를 컴파일 시에 하지 않고 실행한다. 실행할 때는 에 대치되는 int, double 등의 형식이 사용되고 이런 데이터들은 더하거나 비교할 수 있기 때문에 에러가 발생하지 않는다. 저장하는 데이터의 형이 int, double,float,decimal 등 어떤 숫자형 배열이라도 적용할 수 있는 메소드를 dynamic과 일반화 프로..
-
일반화 클래스(제네릭 클래스)C# 예제 공부일기 2020. 7. 13. 19:10
일반화(제네릭) 클래스는 멤버의 형을 로 표시한 클래스이다. 객체 생성 시에 그 멤버의 형이 결정된다. class MyClass { public T x; public T DoSomething(T p) {} } 클래스의 선언 형식은 위와 같다. using System; namespace CPractice { class MyClass { private T[] arr; private int count = 0; public MyClass(int length) { arr = new T[length]; count = length; } public void Insert(params T[] args) { for (int i = 0; i < args.Length; i++) arr[i] = args[i]; } public..
-
일반화 메소드 (제네릭 메소드)C# 예제 공부일기 2020. 7. 13. 18:53
일반화 프로그램은 데이터 형식을 일반화 하는 기법으로 Generic Programming이라고 한다. int 메소드를 출력하는 PrintArray(int[] a) 메소드를 만들 었는데, double 배열도 출력할 일이 생겼을 때 앞서 배운 방식으로 반환타입만 바꿔줘서 복사를 하는 방법도 있겠지만, 더 좋은 방법이 일반화 프로그램이다. 일반화 프로그램으로 만든 메소드를 일반화 메소드라고 하며 위에서 메소드 중복으로 만든 두개의 (int,double)에 대해 하나의 메소드로 처리가 가능해진다. void PrintArray(T[] a) { } //일반화 메소드 정의 여기서 사용된 T는 type이라는 의미를 갖는 기호이다. 다른 문자도 사용가능 는 int, double등의 형식으로 대치된다. using Syst..