Go数据结构与算法-实现List


title: Go数据结构与算法-实现List
tags: go,算法


介绍

列表是非常常见的一种数据结构,比如日常所见的购物清单、待办事项等等。 它提供了对列表数据的一系列操作,比如:添加、删除、修改、遍历等功能。

演示

package main

import (
	"errors"
	"fmt"
)

var ListLength  =10  //定义列表全局长度

//interface  实例化int,int., string ,string
type  List interface {
	Size() int  //函数大小,返回大小
	Get(index int)(interface{},error) //根据索引抓取数据
	Set(index int,newval interface{})error //设置
	Insert(index int,newval interface{})error //插入
	Append(newval interface{}) error//追加
	Remove(index int)error   //删除
	Clear() //清空
	String() string //返回字符串
}

//结构体
type ArrayList struct{
	dataStore []  interface{}
	theSize  int
}
//创建新的链表
func  New() *ArrayList{
	list:=new(ArrayList)
	list.dataStore=make([]interface{},0,ListLength) //分配内存10个数组元素

	list.theSize=0  //0
	//fmt.Println("new",list.theSize,cap(list.dataStore))
	return list
}

//获取链表长度
func (list *ArrayList) Size() int{
	return list.theSize  //返回大小

}

//追加数据
func(list *ArrayList)  Append (newval  interface{}){

	list.dataStore=append(list.dataStore,newval) //数据叠加
	list.theSize++ //索引移动
}
// 获取索引所在数据
func (list *ArrayList)  Get(index int)(interface{},error){
	if index <0 || index >=list.theSize{
		return nil,errors.New("索引越界")
	}
	return list.dataStore[index],nil
}

//根据索引更改数据
func (list *ArrayList)  Set(index int,newval interface{})(error){
	if index <0 || index >=list.theSize{
		return errors.New("索引越界")
	}
	list.dataStore[index]=newval //赋值新的值
	return nil
}
// 检查切片是否已满
func (list *ArrayList ) checkmemisfull(){
	if list.Size()==cap(list.dataStore){
		newDataStore:=make([]interface{},0,2*list.Size())//开辟更大内存
		copy(newDataStore,list.dataStore) //拷贝
		list.dataStore=newDataStore //赋值
	}
}

// 插入数据
func (list *ArrayList )Insert(index int,newval interface{})error {
	if index <0 || index >=list.theSize{
		return errors.New("索引越界")
	}
	list.checkmemisfull()
	list.dataStore=list.dataStore[:list.Size()+1]//开辟内存,延展使用的内存
	for i:=list.Size();i>index;i--{
		list.dataStore[i]=list.dataStore[i-1] //从后往前赋值
	}
	list.dataStore[index]=newval  //插入数据
	list.theSize++ //索引加1

	return nil
}
//根据索引移出数据
func (list *ArrayList )Remove(index int)error {
	if index <0 || index >=list.theSize{
		return errors.New("索引越界")
	}

	list.dataStore=append(list.dataStore[:index],list.dataStore[index+1:]...) //删除
	list.theSize--
	return  nil
}
//清空数据
func (list *ArrayList )Clear() {
	list.dataStore=make([]interface{},0,10) //清空
	list.theSize=0
}
// 返回字符串
func (list *ArrayList ) String() string {
	return  fmt.Sprint(list.dataStore)
}

func main(){
	list :=New()
	for i:=0;i<10 ;i++  {
		list.Append(i)
	}
	fmt.Printf("链表长度:%d\n输出链表\n%d\n",list.theSize,list.dataStore)

	list.Remove(3)
	fmt.Println("输出链表")
	fmt.Println(list.dataStore)


	list.Insert(3,100)
	fmt.Println("输出链表")
	fmt.Println(list.dataStore)

	fmt.Println("输出链表")
	fmt.Println(list.String())
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值