더보기
using System;
using System.Collections.Generic;
namespace HelloWorld
{
public class App
{
int[] arr;
int[] temp;
//생성자
public App()
{
arr = new int[2];
//arr[3] = 5; indexOutOfRange
Console.Write("배열arr의 요소: ");
for (int i = 0; i < this.arr.Length; i++)
{
Console.Write("{0} ", arr[i]);
}
Console.WriteLine();
AddItem(3);
AddItem(5);
AddItem(11);
Console.WriteLine();
Console.WriteLine("3 요소 제거하기");
Console.WriteLine();
Subtract(3);
Console.WriteLine();
Console.WriteLine("5 요소 제거하기");
Subtract(5);
}
void AddItem(int item)
{
int emptyIndex = -1; //빈방 인덱스 임시 저장공간 -1이면 못찾음
//배열의 요소를 순회하며 빈공간 찾기
//0 인덱스부터 배열의 길이 -1 (last index)까지
//배열의 요소의 값을 확인한다 (값이 0인가?)
//요소의 값이 0이라는 뜻은 비어있다 (약속)
for (int i = 0; i < this.arr.Length; i++)
{
//Console.WriteLine(i); //i값은 배열의 인덱스
if (this.arr[i] == 0)
{//빈방 찾았다
emptyIndex = i; //빈방 인덱스
break;
}
}
//Console.WriteLine("emptyIndex: {0}", emptyIndex);
if (emptyIndex == -1)
{
//full
//기존배열의 길이보다 1개큰 임시 배열을 생성한다
int[] temp = new int[this.arr.Length + 1];
//기존 배열을 순회 하며 임시배열에 순서대로 넣어준다
for (int i = 0; i < this.arr.Length; i++)
{
temp[i] = this.arr[i];
}
//값복사 완료
//기존 배열을 임시배열로 교체한다
this.arr = temp;
//배열의 끝에 요소의 값을 넣는다
this.arr[this.arr.Length - 1] = item;
}
else
{
//인덱스에 요소를 할당한다
this.arr[emptyIndex] = item;
}
Console.Write("추가: {0} : ", item);
for (int i = 0; i < this.arr.Length; i++)
{
Console.Write("{0} ", this.arr[i]);
}
Console.WriteLine();
}
void Subtract(int item)
{
int findIndex = -1;
int emptyIndex = -1;
//배열의 요소를 순회하며 해당 아이템 찾기
for (int i = 0; i < this.arr.Length; i++)
{
if (this.arr[i] == item)
{//찾았다
findIndex = this.arr[i];
this.arr[i] = 0; //해당 인덱스 비우기
break;
}
}
if (findIndex == item)
{
while (this.arr[this.arr.Length - 1] != 0)
{
for (int i = 0; i < this.arr.Length; i++)
{
if (this.arr[i] == 0)
{//빈방 찾았다
emptyIndex = i; //빈방 인덱스
break;
}
}
this.arr[emptyIndex] = this.arr[emptyIndex + 1];
this.arr[emptyIndex + 1] = 0;
Console.Write("요소자리바꾸기: ");
for (int i = 0; i < this.arr.Length; i++)
{
Console.Write("{0} ", this.arr[i]);
}
Console.WriteLine();
}
temp = this.arr;
this.arr = new int[this.arr.Length - 1];
for (int i = 0; i < this.arr.Length; i++)
{
this.arr[i] = temp[i];
}
}
Console.Write("빈 인덱스 제거하고 요소출력: ");
for (int i = 0; i < this.arr.Length; i++)
{
Console.Write("{0} ", this.arr[i]);
}
Console.WriteLine();
}
}
}
'자료구조' 카테고리의 다른 글
Node (0) | 2021.12.28 |
---|---|
동적배열로 인벤토리 만들기 (0) | 2021.12.28 |
동적 배열 (Dynamic Array) (0) | 2021.12.28 |
Jagged Array (가변배열) (0) | 2021.12.28 |
Dictionary + 인벤토리 (0) | 2021.12.26 |