Golang 데이터 구조 - 대기 열
대열 은 선진 선발 원칙 의 순서에 따라 집합 한다.대기 열의 한 끝 에 요 소 를 넣 고 다른 한 끝 에서 요 소 를 꺼 냅 니 다.대열 응용 은 현실 에서 많은 장면 이 있 는데, 우 리 는 시간 을 초과 한 계산 대열 이나 영화관 의 검표 행렬 을 상상 할 수 있다.
1. 실현
우 리 는
slice
을 대열 의 밑바닥 구조 로 사용 하여 다음 과 같은 방법 을 폭로한다.New
구조 함수 와 유사 하여 내부 절편 을 초기 화 하 는 것 을 책임 집 니 다.우 리 는 일반적인 병렬 안전 한 대기 열 ItemQueue
을 만 들 계획 이다.genny
을 사용 하여 특정 유형 을 생 성하 여 범 형 유형 값 을 봉인 하 는 데이터 구 조 를 만 들 수 있다.genny
소 개 는 윗글 을 참고 할 수 있다.ItemQueue.go
package queue
import (
"github.com/cheekybits/genny/generic"
"sync"
)
// Item the type of the queue
type Item generic.Type
type ItemQueue struct {
data [] Item
mux sync.RWMutex
}
func (s *ItemQueue)New() *ItemQueue {
s.data = [] Item{}
s.mux = sync.RWMutex{}
return s
}
func (s *ItemQueue) Enqueue(item Item) {
s.mux.Lock()
defer s.mux.Unlock()
s.data = append(s.data, item)
}
func (s *ItemQueue) Dequeue() Item {
s.mux.Lock()
defer s.mux.Unlock()
item := s.data[0]
s.data = s.data[1:]
return item
}
func (s *ItemQueue) Front() Item {
s.mux.RLock()
defer s.mux.RUnlock()
return s.data[0]
}
func (s *ItemQueue) IsEmpty() bool {
return len(s.data) == 0
}
func (s *ItemQueue) Size() int {
return len(s.data)
}
2. 테스트
테스트 코드 는 위의 방법의 사용 을 설명 합 니 다.
ItemQueue_test.go
package queue
import (
"log"
"testing"
)
var q ItemQueue
func initQueue() {
if q.data == nil {
q = ItemQueue{}
q.New()
}
}
func TestIQueue_queue(t *testing.T) {
initQueue()
q.Enqueue(1)
q.Enqueue(2)
q.Enqueue(3)
q.Enqueue(4)
log.Println("size",q.Size())
item := q.Dequeue()
log.Println("pop item",item)
log.Println("queue front item",q.Front())
log.Println("size",q.Size())
log.Println("isEmpty",q.IsEmpty())
}
출력:
2020/07/12 10:47:29 size 4
2020/07/12 10:47:29 pop item 1
2020/07/12 10:47:29 queue front item 2
2020/07/12 10:47:29 size 3
2020/07/12 10:47:29 isEmpty false
--- PASS: TestIQueue_queue (0.11s)
PASS
3. 구체 적 인 대기 열 데이터 구 조 를 만 듭 니 다.
다음은 구체 적 인 유형, int 와 string 을 생 성 합 니 다.
//generate a `IntQueue` queue of `int` values
genny -in IQueue.go -out queue-int.go gen "Item=int"
//generate a `StringQueue` queue of `string` values
genny -in IQueue.go -out queue-string.go gen "Item=string"
4. 총화
본 고 는 안전 한 범 형 대기 열 데이터 구 조 를 실현 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang 구현 대기열 및 스택대기열: 스택: github 주소:https://github.com/golibec/Lstruct.git 후속적으로 각종 데이터 구조와 주류 알고리즘을 지속적으로 보완할 것이다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.