这里我就直接把go的代码给写出来
package main
import "log"
const MAX = 50
type SqList struct {
Data *[MAX]int
Length int
}
// 顺序表初始化
func initList(sql *SqList) bool {
// 数据初始化
sql.Data = new([MAX]int)
// 判断是否更新成功
if sql.Data == nil {
return false
}
sql.Length = 0
return true
}
// 顺序表插值
func listInsert(sql *SqList, i int, e int) bool {
// 先判断i值是否合法
if i < 1 || i > sql.Length+1 {
return false
}
// 判断当前存储空间是否已满
if sql.Length >= MAX {
return false
}
// 先把所有的数据都整体向后移
for j := sql.Length - 1; j >= i-1; j-- {
sql.Data[j+1] = sql.Data[j]
}
// 放入新值
sql.Data[i-1] = e
// 长度+1
sql.Length++
return true
}
// 顺序表取值
func getElement(sql *SqList, i int, e *int) bool {
// 判断i值是否合法
if i < 1 || i > sql.Length {
return false
}
// 返回顺序表的值
e = &sql.Data[i-1]
// 这里好像是go的一些问题,取值后无法获取
log.Println("取值", *e)
return true
}
// 顺序表查找
func localElement(sql *SqList, e int) int {
// 遍历顺序表,查找数据
for i := 0; i < sql.Length; i++ {
// 如果相等那么就返回这个数据所在的位置
if sql.Data[i] == e {
return i + 1
}
}
return 0
}
// 顺序表删除
func listDelete(sql *SqList, i int) bool {
// 判断是否合法
if i < 1 || i > sql.Length {
return false
}
// 开始删除,我们直接把所有的数据都后移一位就行
for j := i; j < sql.Length; j++ {
sql.Data[j-1] = sql.Data[j]
}
// 长度要减1
sql.Length--
return true
}
// 打印顺序表
func listPrint(sql *SqList) {
log.Println("长度:", sql.Length)
log.Println("----开始打印----")
for i := 0; i < sql.Length; i++ {
log.Println(i, ":", sql.Data[i])
}
log.Println("----打印结束----")
}
func main() {
sql := new(SqList)
// 初始化顺序表
initList(sql)
// 顺序表插值
listInsert(sql, 1, 6)
listInsert(sql, 1, 5)
listPrint(sql)
// 获取第一个值
e := new(int)
getElement(sql, 1, e)
log.Println("取值为", *e)
// 查找值
log.Println("6所在的位置为", localElement(sql, 6))
// 删除值
listDelete(sql, 1)
listPrint(sql)
}