package main
import "fmt"
type SqListMehtods interface {
ListInsert(index int, value int) bool
ListDelete(index int) bool
LocateElem(element int) int
PrintList()
}
type SqList struct {
data []int
size int
maxSize int
}
func initSeqList(maxSize int) (list *SqList) {
var data []int
list = &SqList{
data: data,
maxSize: maxSize,
size: 0,
}
return list
}
func (s *SqList) ListInsert(index int, value int) bool {
if index < 1 || index > s.maxSize { //判断index是否是有效范围
return false
}
if s.size == s.maxSize { //当前存储空间已满
fmt.Println("full")
return false
}
s.data = append(s.data, 0) //切片最后append加入占位
for j := s.size; j >= index; j-- { //将第i个元素及其之后的元素后移
s.data[j] = s.data[j-1]
}
s.data[index-1] = value //在位置index处放入value
s.size++ //线性表长度+1
return true
}
func (s *SqList) ListDelete(index int) bool {
if index < 1 || index > s.maxSize { //判断index是否是有效范围
return false
}
if s.size == 0 { //线性表为空
return false
}
for i := index; i < s.size-1; i++ {
s.data[i] = s.data[i+1]
}
s.data = append(s.data[:s.size-1])
s.size--
return true
}
func (s *SqList) LocateElem(element int) int {
for i := 0; i < s.size; i++ {
if s.data[i] == element {
return i + 1
}
}
return 0
}
func (s *SqList) PrintList() {
for i := 0; i < s.size; i++ {
fmt.Print(s.data[i], " ")
}
}
func main() {
var sqList SqListMehtods = &SqList{}
// 创建一个大小为 5 的 SqList
sqList = initSeqList(5)
// 插入元素
sqList.ListInsert(1, 10)
sqList.ListInsert(2, 20)
sqList.ListInsert(3, 30)
sqList.ListInsert(4, 40)
sqList.ListInsert(5, 50)
//sqList.ListInsert(5, 60) 输出full
//删除
sqList.ListDelete(3)
//通过元素查询
fmt.Println(sqList.LocateElem(20))
// 输出线性表
sqList.PrintList()
}
输出结果
2
10 20 30 50