[golang 데이터 구조 와 알고리즘] - 순서 대기 열과 체인 대기 열

1850 단어 데이터 구조

대기 열 은 스 택 과 마찬가지 로 조작 이 제 한 된 선형 표 데이터 구조 이 고 선진 적 인 선 출 특성 을 가진다.
배열 로 이 루어 진 스 택 을 순서 스 택 이 라 고 하고 링크 로 이 루어 진 스 택 을 체인 스 택 이 라 고 합 니 다. 마찬가지 로 배열 로 이 루어 진 대기 열 을 순서 대기 열 이 라 고 하고 링크 로 이 루어 진 대기 열 을 체인 대기 열 이 라 고 합 니 다.
순서 대열
package modules

type ArrayQueue struct {
	items []string	//   
	n     int       //       
	head  int		//         
	tail  int		//         
}
//     
func (a *ArrayQueue)InitQueue(n int)  {
	a.n = n
	a.head = 0
	a.tail = 0
	a.items = make([]string, a.n)
}

func (a *ArrayQueue)PushQueue(data string) bool {
	if a.tail == a.n {
		if a.head == 0 {
			// tail=n && head=0           ,         
			return false
		}
		//   tail=0        ,        
		//       ,          ,       ,              
		for i := a.head; i < a.tail; i++ {
			a.items[i-a.head] = a.items[i]
		}
		a.head = 0
		a.tail -= a.head
	}
	//            head tail     
	// head  0 ,tail    head   ;
	a.items[a.tail] = data
	a.tail++
	return true
}

func (a *ArrayQueue)PopQueue() string {
	if a.tail == a.head {
		//                     
		return ""
	}
	temp := a.items[a.head]
	//  head      ,head    
	a.head++
	return temp
}

 
체인 대기 열 
package modules

type LinkedQueue struct {
	head *Node
	tail *Node
}

func (l *LinkedQueue)InitLinkedQueue()  {
	l.head = nil
	l.tail = nil
}

func (l *LinkedQueue)PushLinkedQueue(value int)  {
	if l.tail == nil {
		newNode := &Node{Data:value, Next:nil}
		//           
		l.head = newNode
		l.tail = newNode
	} else {
		//         
		l.tail.Next = &Node{Data:value, Next:nil}
		//        
		l.tail = l.tail.Next
	}
}

func (l *LinkedQueue)PopLinkedQueue() int {
	//     
	if l.head == nil {
		return -1
	}
	temp := l.head.Data
	l.head = l.head.Next
	if l.head == nil {
		//         ,       
		l.tail = nil
	}
	return  temp
}

좋은 웹페이지 즐겨찾기