package main
import "fmt"
type List struct {
length int
Data []interface{}
maxSize int
}
func (l *List) ListInit(size int) {
l.maxSize = size
l.length = 0
l.Data = make([]interface{}, size)
}
// Length 顺序表的长度
func (l *List) Length() int {
return l.length
}
// Empty 顺序表是否为空
func (l *List) Empty() bool {
return l.length == 0
}
// Full 顺序表是否已满
func (l *List) Full() {
if l.length == l.maxSize {
panic("顺序表已满")
}
}
// Clear 清空顺序表
func (l *List) Clear() {
l.Data = make([]interface{}, l.maxSize)
l.length = 0
}
// Get 顺序表获取值
func (l *List) Get(idx int) interface{} {
if idx < 0 || idx >= l.length {
return -1
}
return l.Data[idx]
}
// Insert 顺序表的插入
func (l *List) Insert(idx int, value interface{}) {
if idx < 0 || idx > l.maxSize {
panic("下标超出存储最大值")
}
l.Full()
if idx < l.length {
for i := l.length; i > idx; i-- {
l.Data[i] = l.Data[i-1]
}
l.Data[idx] = value
} else {
l.Data[l.length] = value
}
l.length++
}
// Delete 顺序表的删除
func (l *List) Delete(idx int) {
if idx >= l.length || idx < 0 {
panic("角标越界")
}
for i := idx; i < l.length; i++ {
l.Data[i] = l.Data[i+1]
}
l.length--
}
// Exist 顺序表查找数据是否存在
func (l *List) Exist(value interface{}) bool {
for _, v := range l.Data {
if v == value {
return true
}
}
return false
}
// Add 顺序表从头开始添加
func (l *List) Add(value interface{}) {
l.Full()
for i := l.length; i > 0; i-- {
l.Data[i] = l.Data[i-1]
}
l.Data[0] = value
l.length++
}
// Append 顺序表从后面添加
func (l *List) Append(value interface{}) {
l.Full()
l.Data[l.length] = value
l.length++
}
// Index 获取下标
func (l *List) Index(value interface{}) int {
for i, v := range l.Data {
if v == value {
return i
}
}
return -1
}
func main() {
var l List
l.ListInit(6)
l.Insert(5, 10)
l.Insert(0, 1)
l.Insert(0, 1)
l.Insert(2, 3)
l.Add(2)
l.Append(4)
fmt.Println(l.Index(3))
fmt.Println(l.Data)
}
【数据结构连载一线性表】【顺序表】golang
最新推荐文章于 2024-07-20 11:22:21 发布