祗疼妳一个 发表于 2024-8-30 11:48:31

(go)线性表的次序存储

闲来无事,更新一下,线性表的次序存储,go语言版本,结果都已经测试过,下面给出各部分细节


package main

import "fmt"

const MAXSIZE = 100

type LNode *List
type ElementType int
type List struct {
        Data []ElementType
        Last int
}
type L List
1、生成一个线性表

func MakeEmpty() *List {
        PtrL := &List{
                Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片
                Last: -1,
        }
        return PtrL
}

2、查找

func Find(x ElementType, PtrL *List) int {
        i := 0
        for i <= PtrL.Last && PtrL.Data != x {
                i++
        }
        if i > PtrL.Last {
                return -1
        } else {
                return i + 1
        }
}
func FindKth(K int, PtrL List) ElementType {
        if K < 1 || K > PtrL.Last+1 {
                return -1
        } else {
                return PtrL.Data
        }
}
3、插入


func Insert(x ElementType, i int, PtrL *List) {
        j := 0
        if PtrL.Last == MAXSIZE-1 {
                fmt.Printf("Data Full")
                return
        }
        if i < 1 || i > PtrL.Last+2 {
                fmt.Printf("Position abnormal")
                return
        }
        for j = PtrL.Last; j >= i-1; j-- {
                PtrL.Data = PtrL.Data
        }
        PtrL.Data = x
        PtrL.Last++
        return
}
4、求长度

func Length(PtrL List) int {
        return PtrL.Last
}
5、改值

func Alter(x ElementType, i int, PtrL *List) {
        if i < 1 || i > PtrL.Last+1 {
                fmt.Printf("No find element:%d", i)
                return
        }
        PtrL.Data = x
}
6、删除

func Delete(i int, PtrL *List) {
        j := 0
        if i < 1 || i > PtrL.Last+1 {
                fmt.Printf("Not Find Element,")
                return
        }
        for j = i; j <= PtrL.Last; j++ {
                PtrL.Data = PtrL.Data
        }
        PtrL.Last--
        return

}
7、遍历

func PrintL(PtrL *List) {
        for i := 0; i <= PtrL.Last; i++ {
                fmt.Printf(" %d", PtrL.Data)
        }
        fmt.Println()
}

8、测试程序

func main() {
        L := MakeEmpty()
        Insert(1, 1, L)
        Insert(2, 2, L)
        Insert(3, 3, L)
        Insert(4, 4, L)
        Insert(5, 5, L)
        Insert(6, 6, L)
        PrintL(L) //打印
        Delete(2, L)
        PrintL(L)
        Alter(2, 2, L)
        PrintL(L)
        x := Find(2, L)
        fmt.Println("result:", x)
        FindKth(2, *L)
        length := Length(*L)
        fmt.Println("len:", length)
}

https://i-blog.csdnimg.cn/direct/b41a28be7028417cb3f2a8f805f3d13f.png
9、完整代码

package main

import "fmt"

const MAXSIZE = 100

type LNode *List
type ElementType int
type List struct {
        Data []ElementType
        Last int
}
type L List
func MakeEmpty() *List {
        PtrL := &List{
                Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片
                Last: -1,
        }
        return PtrL
}

func Find(x ElementType, PtrL *List) int {        i := 0        for i <= PtrL.Last && PtrL.Data != x {                i++        }        if i > PtrL.Last {                return -1        } else {                return i + 1        }}
func Insert(x ElementType, i int, PtrL *List) {
        j := 0
        if PtrL.Last == MAXSIZE-1 {
                fmt.Printf("Data Full")
                return
        }
        if i < 1 || i > PtrL.Last+2 {
                fmt.Printf("Position abnormal")
                return
        }
        for j = PtrL.Last; j >= i-1; j-- {
                PtrL.Data = PtrL.Data
        }
        PtrL.Data = x
        PtrL.Last++
        return
}
func Length(PtrL List) int {
        return PtrL.Last
}
func Alter(x ElementType, i int, PtrL *List) {
        if i < 1 || i > PtrL.Last+1 {
                fmt.Printf("No find element:%d", i)
                return
        }
        PtrL.Data = x
}
func FindKth(K int, PtrL List) ElementType {        if K < 1 || K > PtrL.Last+1 {                return -1        } else {                return PtrL.Data        }}func Delete(i int, PtrL *List) {
        j := 0
        if i < 1 || i > PtrL.Last+1 {
                fmt.Printf("Not Find Element,")
                return
        }
        for j = i; j <= PtrL.Last; j++ {
                PtrL.Data = PtrL.Data
        }
        PtrL.Last--
        return

}
func PrintL(PtrL *List) {
        for i := 0; i <= PtrL.Last; i++ {
                fmt.Printf(" %d", PtrL.Data)
        }
        fmt.Println()
}

func main() {
        L := MakeEmpty()
        Insert(1, 1, L)
        Insert(2, 2, L)
        Insert(3, 3, L)
        Insert(4, 4, L)
        Insert(5, 5, L)
        Insert(6, 6, L)
        PrintL(L) //打印
        Delete(2, L)
        PrintL(L)
        Alter(2, 2, L)
        PrintL(L)
        x := Find(2, L)
        fmt.Println("result:", x)
        FindKth(2, *L)
        length := Length(*L)
        fmt.Println("len:", length)
}

https://i-blog.csdnimg.cn/direct/9fbeee10e1ac47198dae1fb3161ebbe7.webp
总结

看着c语言敲的,只是对语法进行简单了解

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: (go)线性表的次序存储