본문 바로가기
STUDY/자료구조

[C# 자료구조] 선형 리스트(배열, 스택, 큐)

by 램플릿 2024. 6. 25.

 

1. 배열에 대해 바로 알고 쓴다. [ 9 ~ 10 시 ] 
2. 스택에 대해 자체 제작이 가능하고 활용할 수 있다.  [ 9 ~ 10 ]
3. 큐에 대해 자체 제작이 가능하고 활용할 수 있다. [ 10~ 11 ]
4. 링크드리스트 에 대해 자체 제작이 가능하고 화룡할 수 있다 . [ 10 - 11 ]
5. 더블링크드리스트 에 대해 자체 제작이 가능하고 활용할 수 있다. [ 1 ~ 2 ]
6. 재귀 함수를 바로 알고 쓴다.(활용) [ 3- 4 ]

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

배열

배열(Array)은 자료구조를 만들때 많이 쓰인다.연속적인 메모리를 타입에 따라 저장하는 자료구조의 베이스가 되는 역할을 한다. 고정적인 공간을 할당하므로, 길이가 잘 변하지 않는 경우에 사용한다.

배열의 길이가 변하는 경우에는 배열 대신 List를 사용한다.

 

사용 사례 :: 
https://velog.io/@soyoungdl/%EC%8A%A4%ED%83%9D-%ED%81%90-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80

*배열 : 스킬 단축키- 런타임중에 추가될 일이 잘 없기때문에(이미 수가 정해진 경우) 배열을 사용해도좋다.
인벤토리, 테트리스 등..
*스택: 커맨드 패턴 - 사용자 상태/행동이 롤백되도록 함.
* : 네트워크 패킷을 받아서 순서대로 관리하기 위해 사용, 오브젝트풀링, 소울라이크 게임의 스킬 선입력등을 구현할 때 활용 (다만 선입력 구현시에는 Behavior Tree를 더 추천)

 



 List는 삭제 시 시간복잡도가 좋지 않다.

삭제 작업이 많은 경우 스택, 큐, 딕셔너리, 해시셋이 가장 빠르다.

그다음으로 > SortedDictionary > SortedSet > List를 추천한다.

알고리즘 시간복잡도 참조 사이트👍
https://www.cs.usfca.edu/~galles/visualization/


6/25 과제(1)
4by4 배열에서 블록 테트리스처럼 만들기
(16칸중 4칸색칠, 나머지 12칸은 아무것도 표시안함)

2차원 배열 활용 예시

public class Item
{
    public int _itemNumber;
    public int[,] tetris;
}

public class Inventory : MonoBehavior{
	public Item[] items;

	void Start(){
		int itemNumber = -1;
		
        //배열 요소 초기화
        items = new Item[4]
        {
            new()
            {
                _itemNumber = ++itemNumber,
                tetris = new int[,]{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
            },
    		new(){...}, new(){...}, new(){...}
        };

        //(동일한 초기화 방법)
        items[0] = new Item()
        {
            _itemNumber = ++itemNumber,
            tetris = new int[,]{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
         };
		items[1] = new Item(){};
		items[2] = new Item(){};
		items[3] = new Item(){};
	}
}

 

 

6/25 과제(2)
노드로 링크드리스트 구현
소스코드/캡쳐 제출