Go 데이터 구조의 순서 표 (SqList)
11835 단어 데이터 구조 와 알고리즘개발 도구
순서 표 는 컴퓨터 메모리 에 배열 로 저 장 된 것 으로 주소 연속 저장 장치 가 순서대로 저 장 된 구조 입 니 다. 특징: 조 회 는 상수 시간 이 고 추가 와 삭 제 는 선형 시간 O (n) 입 니 다.
다음은 제 가 Go 언어 로 이 루어 진 순서 표 입 니 다. 사실은 안에 Go 자체 의 Slice 로 저장 되 어 있 습 니 다. 프로그램 은 상대 적 으로 간단 합 니 다.
/**
* Created with IntelliJ IDEA.
* Date: 4/24/14
* Time: 5:11 PM
* .
* Author: [email protected]
* Copyright 2014 Requelqi. All rights reserved.
*/
package SqList
import (
"errors"
"fmt"
)
const (
DefaultSize = 100
)
//
type ElementType interface{}
//
type SqList struct {
elems []ElementType //
pos int //
}
/**
*/
func NewSqListBySize(size int) *SqList {
return &SqList{make([]ElementType, size), -1}
}
/**
*
*/
func NewSqListDefault() *SqList {
return NewSqListBySize(DefaultSize)
}
/**
*
*/
func (list *SqList) ClearList() {
list.pos = -1
}
/**
*
*/
func (list *SqList) IsEmptyList() bool {
return list.pos == -1
}
/**
*
*/
func (list *SqList) Length() int {
return list.pos + 1
}
/**
*
*/
func (list *SqList) Capacity() int {
return cap(list.elems)
}
/**
*
*/
func (list *SqList) GetElem(pos int) (ElementType, error) {
err := list.validPostion(pos)
if (err != nil) {
return nil, err
}
if list.pos == -1 {
return nil, nil
}
return list.elems[pos], nil
}
/**
*
*/
func (list *SqList) AddElement(x ElementType) error {
if cap(list.elems) == list.pos + 1 {
return errors.New("The SqList is full.")
}else {
list.elems[list.pos + 1] = x
list.pos++
}
return nil
}
/**
*
*/
func (list *SqList) Insert(x ElementType, pos int) error {
err := list.validInsertPostion(pos)
if (err != nil) {
return err
}
for i := list.pos; i >= pos; i-- {
list.elems[i + 1] = list.elems[i]
}
list.elems[pos] = x
list.pos++
return nil
}
/**
,
*/
func (list *SqList) Remove(pos int) error {
err := list.validPostion(pos)
if (err != nil) {
return err
}
for i := pos; i < list.pos; i++ {
list.elems[i] = list.elems[i + 1]
}
list.pos--
return nil
}
/**
*/
func (list *SqList) Update(x ElementType, pos int) error {
err := list.validPostion(pos)
if err != nil {
return err
}
list.elems[pos] = x
return nil
}
/**
*
*/
func (list *SqList) PrintList() {
fmt.Println("The elements is:")
for i := 0; i <= list.pos; i++ {
tmp, _ := list.GetElem(i)
fmt.Println(" ", tmp)
}
}
/**
, pos 。
*/
func (list *SqList) validInsertPostion(pos int) error {
if pos > cap(list.elems) || pos < 0 {
return errors.New("SqList pos out 0f bounds error.")
}
if pos > list.pos + 1 || pos < 0 {
return errors.New("you set a wrong position.")
}
return nil
}
/**
, (update Or remove Or get) pos 。
*/
func (list *SqList) validPostion(pos int) error {
if pos > cap(list.elems) || pos < 0 {
return errors.New("SqList pos out 0f bounds error.")
}
if pos > list.pos || pos < 0 {
return errors.New("you set a wrong position.")
}
return nil
}
다음으로 전송:https://www.cnblogs.com/requelqi/p/3690447.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.