Go数据结构(一)线性表

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值