顺序表使用,插入,删除,查找


这里我就直接把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)
}

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录