'Queue'에 해당되는 글 1건

  1. 2011.10.30 [자료구조] 자바로 만든 큐(Queue) (1)
2011.10.30 17:48
[자료구조]
큐 (Queue)


부대에서 자료구조에 관한 책을 잠깐 봤었는데, 몇몇 자료구조중 내가 써먹을 곳이 있어서 하나 구현해봤다.

아직 자료구조를 공부한게 아니고 추상적으로 '뭐 이런이런 개념..' 으로만 알고 있어서 실사용에는 뭔가 부족할것 같다.

일단, 구현한건 큐인데, 구현한 이유가, 자바에서 fps 표시를 할때 숫자의 변동이 심해서 몇인지 잘 보기 어렵다. 따라서 대략 60개 정도의 fps를 가져오고 이넘의 평균값을 표시하는것으로 했다.
(구현한 fps 측정이 허접하기 때문일 수 도 있지만;;; : 단순히 1프레임당 시스템 숫자 변동폭의 역수를 취해주는 방법으로 계산했음..;;) 


자주하는 게임인 카운터스트라이크 : 소스에 보면, fps를 표시하는 방법이 2개가 있다.  (net_ 제외하고.)

cl_showfps 1 과  
cl_showfps 2 인데, 이 둘의 차이점으론, 

1일땐 순간의 fps를 측정, 2일땐 평균값? 대충 0.5초간의 평균값을 말해주는것 같다. 자세히 보진 않았지만..ㅋ


따라서, 보기 편한것은 2일때가 되겠다. (위에서 적었듯이, 1은 변동이 심해서 무슨 숫자인지 보기 힘듬.) 

그래서 큐를 이용해서 구했다. (아, 내가 만든건 선형 큐)


큐의 특성? 은 FIFO(퍼스트 인 퍼스트 아웃) 라고들 하는데 그러니깐 먼저 들어간 사람이 먼저 나온다. 즉 줄 서서 기다릴때랑 똑같다.

그래서 fps를 계산할때도 먼저 들어간 값(오래된 값)먼저 지운다(dequeue). 가 되겠다.

그래서 실시간으로 갱신이 되지만, 쉽게 숫자를 인식 할 수 있는 법위인.. 뭐 그렇게 생각 할 수 있겠다.

나중에 스택을 구현해 보겠지만, 큐 구현이 맨땅에 헤딩하는식으로 만들어서 뭔가 좀 병맛이다...ㅠㅠ
(객체를 넣을때는 상관이 없는데, 객체를 불러와서 사용할땐, Object 타입이라서 다루기가 짜증난다. 예를들면, 숫자를 담아두었는데, 전체 데이터에 엑세스 할때 Object 라서 double 형 따위로 쉽게 변환이 안된다는것..

그래서 꼬꼼수로 toString 하고 Double 클래스의 valueOf로 다시 값을 읽어들이고...-_- 멍청한 짓하는건가.ㅋ 아님 자바로 이걸 만든다는게 좀 이상한건가;; C의 포인터같은게 없어서 뭔가 꼼수로 만든것 같다..ㅋ)


어쨋든 자바를 배우게 되면 다시한번 짜봐야 겠다.

일단, 코드..ㅋ

package utils;

import java.util.ArrayList;

public class Queue {
	
	protected int size;
	protected Object data[];
	protected int cur;
	
	
	public Queue(int $size){
		size = $size;
		data = new Object[$size];
		cur = $size-1;
		inits();
	}
	
	protected void inits(){
		int i=0;
		for(;i<size;i++){
			data[i] = null;
		}
	}
	
	public void initializeWith(Object init_value){
		for(int i=0;i<size;i++){
			data[i] = init_value;
		}
	}
	
	public Object enQueue(Object o){
		Object temp = data[cur];
		data[cur] = o;
		if(cur<=0) cur = size-1;
		else cur--;
		return temp;
	}
	
	public Object deQueue(){
		Object temp = data[cur];
		data[cur] = null;
		if(cur<=0) cur = size-1;
		else cur--;
		return temp;
	}
	
	public int getSize(){
		return size;
	}
	
	public Object[] getData(){
		return data.clone();
	}
	
	public void printData(){
		trace(data);
	}
	
	protected void set_cur(){
		cur--;
		if(cur<0) cur = size-1;
	}
	
	protected static void trace(Object ...args){
		int l = args.length-1, i=l;
		for(;i>0;i--){	System.out.print(args[i]+", ");	}
		System.out.println(args[0]);
	}
}

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ JAVA +++] > - - Open Source' 카테고리의 다른 글

스택(Stack)  (0) 2012.11.14
(2012년 첫글은!?) [Blur] 블러 구현(java)2  (2) 2012.01.01
[Blur] 블러 구현(java)  (4) 2011.12.20
[자료구조] 자바로 만든 큐(Queue)  (1) 2011.10.30
Trackback 0 Comment 1
  1. Favicon of http://estellenotes.tistory.com BlogIcon 에스텔시아 2011.11.03 15:45 신고 address edit & del reply

    호오...자료구조 공부 열심히 해야겠네 ㅇㅅㅇ;;



티스토리 툴바