본문 바로가기

[ C/ C++ 프로그래밍 ]/[ 루아 ]

[ 루아 ] 테이블의 활용과 자료 구조


루아에서 테이블이 매우 강력한 이유 중에 한가지가 특별한 다른 장치 없이  다른 언어보다 효율적인 성능을 가진채로  테이블만으로 대부분의 자료구조 사용이 가능하다.

ㅇ 배열
가장 흔하게 사용하는 저장 형태, 루아에서는 배열은 특별한 형태가 없다.
테이블 하나로 대부분의 저장형태를 구현 할 수 있다.

- 소스




근본벅으로 루아의 테이블은 크기를 지정할 수 가 없다. 왜냐하면 그 크기가 동적으로 늘어나기 때문이다. 대신 원하는 사이즈만큼 초기화는 할 수 있다.
원하는 사이즈 만큼 초기화 범위를 넘을 경우에는 nil을 리턴한다.
 
다른 언어는 index의 시작점이 0인데 루아는 1부터 시작한다. ==> 조심하자 헷갈리지 말자 ㅠ
다만 초기화 해서 0부터 시작할 수도 있다. C처럼 선형적으로 1차원 배열을 구현하고, 마치 다차원의 배열인 것처럼 사용할 수도 있다

아래는 2차 배열의 선언과 사용 예이다. 테이블은 객체이므로각각의 차원에 대한 테이블 역시 동적으로 객체를 생성해 주어야 한다.

- 소스
 



ㅇ Queue

- 소스
※  왜 QueueNew() 함수를 호출 했는데 head 와 tail 가 queue.head, queue.tail로  될까? 라고 고민하는 사람은 자세히 보면
QueyeNew 함수의 리턴값이 ()괄호로 감싸져 있는 것이 아니라 { }대괄호로 감싸져 있다.  즉 테이블이다. 
C/C++ 하던 버릇때문에 당연히 ()로 될것이라는 생각하는 삽집을 나처럼 할까봐 남긴다.ㅠ



값을 기록하는 위치와 값을 읽어 오는 위치를 각각 tail과 head로 두고, 값을 기록하고, 읽어 올때마다 head 와 tail을 증가시키는 방식이다.
따라서 index가 계속 늘어난다. 루아는 숫자를  double 크기를 사용하기 때문에 숫자가 자체가 오버플로우(overflow) 되는 것을 걱정 할 필요는 없다.

 ㅇ Stack

- 소스





ㅇ Linked List

- 소스




참고 내용 : 예제로 배우는 프로그래밍 루아

'[ C/ C++ 프로그래밍 ] > [ 루아 ]' 카테고리의 다른 글

[ 루아 ] 클래스 상속  (1) 2010.07.22
[ 루아 ] 클래스  (1) 2010.07.21
[ 루아 ] 테이블  (1) 2010.07.20
[ 루아 ] 함수  (0) 2010.07.20
[ 루아 ] EditPlus에서 루아 사용하기  (3) 2010.07.19