본문 바로가기

자료구조

자료구조 기초 스텍 & 큐

자료구조를 왜 배울까?


자료구조란? 자료구조는 자료(데이터)를 다루는 구조 그 자체를 뜻한다. 즉 자료를 어떤 순서로 다룰 것인지에 대한 설계도라고 이해하면 쉽다.

 

목적: 원하는 데이터를 쉽게 찾기 위해서 만약 [1,2,3,4,....10000]중에서 원하는 데이터를 찾아 처리를 해야 한다고 한다면?? 당신은 어떤 방식을 쓰겠는가? 에 대한 물음이라는 생각.

 

 

 

스택(first in last out)


스택의 사전적 의미는 쌓다. 쌓았기 때문에 처음에 들어가기는 쉽지만 나오기 위해서는 마지막으로 나가야 함.

ex) 1차선에 차들이 들어섰을 때 첫번째 차량은 먼저 들어갈 수 있지만 나가고 싶을 때는 마지막으로 나가는 구조.

 

생각해보기 
1. 데이터가 만들어진다 객체에 순서를 만들어준다. 
2. 그에 따라 속성이 하나씩 증가하여 데이터의 위치를 알려준다.
3. 마지막 top 속성에 -1 를 하면 속성의 key를 찾을 수 있다.

 

 

 

 

//강의 목적 스택의 이해 : 원리 데이터가 처음 저장되면 첫 번째 공간에 저장되고 빠져나갈 때는 최신게 빠져나간다. 
//예시로는 앞으로 가기 뒤로 가기

// 스택의 구성은 다음과 같다.

// 1.class 변수의 선언
	// 객체의 형태로 선언
	// 속성은 숫자로 표현될 예정 그럼 어떤 데이터 속성인지 찾기 위해서는 그거를 가리키는 point 변수가 필요
class Stack{

	// 1.class 변수의 선언
	constructor(){
		// 객체의 형태로 선언

		this.storage={}
		// 속성은 숫자로 표현될 예정 그럼 어떤 데이터 속성인지 찾기 위해서는 그거를 가리키는 point 변수가 필요
		this.top = 0
	}
	// 맨 뒤쪽을 빼야하는 push() 함수 선언
    push(el){
			// 속성에는 포인터를 가리키는 point 변수를 넣어주고 속성값에는 넣고싶은 데이터 el 를 넣어준다.
			this.storage[this.top]=el
			this.top++
	   		// 그리고나서 point의 수 즉 속성 값이 달라져야 한다.
	}

   /*
   {o, '가',             top =  1    ===> push 함수가 발생할 때마다 두 가지 사건이 발생 객체 속성의 생성, top 변수의 값이 1 증가.
    1,  '나',            top  = 2
    2,  '다',            top  = 3

	}
    => 객체의 속성과 top은 1씩 차이가 남.
	*/
	


    //맨 뒤쪽부터 빼야하는 pop() 함수 선언
	pop(){
		// 만약에 객체가 비었다면 함수 종료. 
		if(Object.keys(this.storage).length===0){
			return //단순 함수의 종료 
		}
	  // 그렇지 않다면 top-1 번째 객체 삭제.
	    else{
			//그렇지 않으면
			// 마지막 속성의 값을 추출하여 return
			let result=this.storage[this.top-1]
			
			// top-1 번째 객체 삭제.
			delete this.storage[this.top-1]
			 //  top 의 변수를 마이너스 하기.
			return result

			}
	  //  top 의 변수를 마이너스 하기.



	}

	// stack의 사이즈 구하기 

	size(){


		return this.top
	}



}

const result_stack=new Stack()

for(let i=0; i<10; i++){

	result_stack.push(i)
}

console.log(result_stack.size())
console.log(result_stack.pop())

 

 

큐(first in first out)


큐의 사전적 의미 줄을 서서 기다리다 대기 행렬이라는 의미로 처음에 들어온 차량은 당연히 제일 먼저 나갈 수 있다. 

ex) 사람이 프린트 이벤트를 발생했을 때 프린트 출력장치를 처리하려면 처음 페이지부터 해석이 되고 출력이 되어야함. 

 

 

생각해보기

why? 큐라는 데이터 구조가 필요할까? cpu는 다른 장치에 비해 규칙적이고 일정한 처리속도를 가지고 있기 때문에 cpu가 데이터를 처리한 후 que로 데이터를 저장한다. 그리고 이를 저장장치들이 받아서 처리하는 구조.

Why? 왜 변수가 front rear로 두개가 필요할까?  rear 로 속성의 번호는 늘어나지만 이걸로는 que의 pop의 행동을 취할 때 첫 번째 포인터가 아니라 마지막 포인터이기 때문에 두 개가 필요하다 

 

엑셀로 이해하기 



빈객체 front rear 데이터의 길이

{} 0 0 0
데이터를 넣기 {1:”가”} 0 1 1
데이터를 넣기 {1:”가”, 2:”가”} 0 2 2
데이터 빼기 {1:”가”} 1 2 1
데이터 빼기 {} 2 2 0

코드


class Queue{

	//변수를 선언해준다. 
	  // 기본 객체
	  // front 
	  // rear

	constructor(){

		this.storage={}
		this.rear=0
		this.front=0
	}

	//size check

	size(){

		return this.rear-this.front
	}



	//push
    push(el){
		//빈 객체에 rear번째 속성에 el를 넣어준다
		// 그리고 rear 에 1을 더한다

		this.storage[this.rear]=el
		this.rear++

	}


	//pop

	pop(){
		//만약 빈 데이터의 길이가 0이면(빈 객체) undefiend return 
          if(this.rear-this.front===0){
			  return
		  }else{
				// 그렇지 않으면
						//새로운 변수에 front번째 속성값을 담고 
               const result= this.storage[this.front]     
			           //front 번째 제거
			   delete this.storage[this.front]    
			   
						//front에 1을 더하여 새로운 첫 번째를 맞이할 준비를 하자
			   this.front++

			   return result
		  }
       

	}









}



const queue = new Queue

for(let i=1; i<=10; i++){
	queue.push(i)
}

console.log(queue.size())
console.log(queue.pop())



//

'자료구조' 카테고리의 다른 글

자료구조  (0) 2021.12.07
Tree 개념 이해하기  (0) 2021.10.26
Q의 이해 프린트 작업목록  (0) 2021.10.21
Q의 이해 박스뽑기편  (0) 2021.10.16
스택의 이해 앞으로 가기 뒤로가기  (0) 2021.10.15