使用顺序结构实现线性表CRUD
package main
import (
"errors"
"fmt"
)
const(
MAXSIZE = 100
)
var(
linerList [MAXSIZE]int = [MAXSIZE]int{}
size int = 0
)
func Size() int {
return size
}
func Add(value int) (bool, error){
if size > MAXSIZE {
return false,errors.New("线性表空间已满不能再插入新的元素")
}
linerList[size] = value
size++
return true,nil
}
func Get(i int) (int, error){
if i < 0 || i >= size {
return -1,errors.New("索引不能为负数或索引越界")
}
return linerList[i],nil
}
func Iterator() []int {
return linerList[:size]
}
func Del(i int) (bool,error) {
if i < 0 || i >= size {
return false,errors.New("索引不能为负数或索引越界")
}
for n :=i; n < size; n++{
linerList[n]= linerList[n+1]
}
size--
return true,nil
}
func DelByValue(value int)(bool,error) {
var position int
for i:=0; i < size; i++{
if linerList[i] == value{
position = i
break
}
}
for i:= position; i < size; i++{
linerList[i] =linerList[i+1]
}
size--
return true,nil
}
func Set(i,value int) (bool,error){
if i < 0 || i >= size {
return false,errors.New("索引不能为负数或索引越界")
}
for n := size; n >=i; n--{
linerList[n+1] = linerList[n]
}
linerList[i] = value
size++
return true,nil
}
func main(){
Add(1)
Add(2)
Add(3)
Add(4)
fmt.Printf("v:%v\n",Iterator())
fmt.Printf("size:%d\n",Size())
Set(2,101)
fmt.Printf("---------------------------------\n")
fmt.Printf("v:%v\n",Iterator())
fmt.Printf("size:%d\n",Size())
Del(2)
fmt.Printf("---------------------------------\n")
fmt.Printf("v:%v\n",Iterator())
fmt.Printf("size:%d\n",Size())
DelByValue(1)
fmt.Printf("---------------------------------\n")
fmt.Printf("v:%v\n",Iterator())
fmt.Printf("size:%d\n",Size())
}
go run linerlist.go
v:[1 2 3 4]
size:4
---------------------------------
v:[1 2 101 3 4]
size:5
---------------------------------
v:[1 2 3 4]
size:4
---------------------------------
v:[2 3 4]
size:3