해시 테이블
해시 테이블은 해시 함수를 이용하여 자료를 정리하는 구조를 가지고 있다.
탐색속도가 빠르고 사용이 편리한 장점이 있다.
큐
자료를 차례대로 저장해뒀다가 저장순으로 꺼내서 사용하는 자료구조를 가지고 있다.
뒤쪽에서 입력하고 앞쪽에서 출력하게 사용하게 된다(FIFO OR LILO, 퍼스트 인 퍼스트 아웃, 라스트인 라스트아웃)
값을 꺼내 사용하면 사라짐
스택
Stack은 자료를 차례대로 저장해뒀다가 최근에 저장한 순으로 꺼내서 사용하는 자료 구조를 가지고 있다.
Stack은 위에서 입력하고 위에서 출력하여 사용하게 된다 (FILO OR LIFO, 퍼스트인 라스트아웃, 라스트인 퍼스트아웃)
텍스트 파일 출력
기본적으로 파일 입/출력은 FileStream class를 기반으로 사용한다.
이때 FileMode 를 이용해 입출력 방식을 제어하는데, 각각의 파라미터는 아래와 같다.
FileMode.Create : 파일을 만든다. 같은 이름의 파일이 있으면 해당 파일을 지우고 만든다.
FileMode.Open : 기존 파일을 연다.
FileMode.OpenOrCreate : 기존 파일을 연다. 파일이 없으면 생성한다.
FileMode.Append :추가 모드로 파일을연다. 파일이 없으면 생성한다. (기존 내용 수정 불가)
FileMode.CreateNew : 파일을 만든다. 같은 이름의 파일이 있으면 만들지 않는다.
파일 쓰기는 StreamWriter class를 이용하면 편하다.
FileStream fs = new FileStream("C:\Users\admin\Downloads\test.txt", FileMode.Create); //상대경로일 경우 실행파일 위치 기준
StreamWriter sw = new StreamWriter(fs); // open
sw.Write(32);
sw.WriteLine("Hello World!");
sw.Write(3.14);
sw.Close();
파일 읽기는 StreamWriter class를 이용할 수 있다.
FileStream fs = new FileStream("..\test.txt", FileMode.Open); //상대경로일 경우 실행파일 위치 기준
StreamReader sr = new StreamReader(fs);
while (sr.EndOfStream == false)
{
//Console.WriteLine(sr.ReadLine());
Console.Write((char)sr.Read());
}
sr.Close();
[과제1]
화면출력
입력할 인원 수를 입력하세요 : #
========= 1번째 =========
이름을 입력하세요 :
키를 입력하세요(cm) :
몸무게를 입력하세요(kg) :
성별을 입력하세요(남/여) :
...
========= n번째 =========
이름을 입력하세요 :
키를 입력하세요(cm) :
몸무게를 입력하세요(kg) :
성별을 입력하세요(남/여) :
========================
파일 출력 파일명은 HealthInfo.txt
OOO ###.## ###.## 남여
OOO ###.## ###.## 남여
...
바이너리 파일
바이너리 파일 출력은 BinaryWriter class를 이용하여 쓸 수 있다.
FileStream fs = new FileStream("test.bin", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(32);
bw.Write("Hello World!");
bw.Write(3.14);
bw.Write("\n");
bw.Close();
FileStream fs = new FileStream("test.bin", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
while(br.BaseStream.Position < br.BaseStream.Length)
{
int data1 = br.ReadInt32();
string data2 = br.ReadString();
double data3 = br.ReadDouble();
string data4 = br.ReadString();
Console.WriteLine($"{data1} {data2} {data3} {data4}");
}
br.Close();
직렬화
[Serializable] class NameCard { ... }
직렬화 가능한 class로 만들기
직렬화된 파일을 읽고 쓸 때는 BinaryFomatter class를 이용한다.