用一个结构初始化单链表

时间:2018-01-17 05:28:23

标签: go struct initialization singly-linked-list

对于我正在进行的任务,我们被指示创建两个实现Stack接口的数据结构(包括push,pop等方法)。当我完成第一个结构时,链接列表部分让我不知所措。作为正在编写他们的第一个Go项目的人,我不确定如何处理以下指令:

1.创建一个名为StackLinked的新结构,它实现Stacker,并使用单个(或双重)链表作为其内部表示。

2.除了在Stacker中实现所有方法之外,使用此标头编写makeStackLinked()函数(不是方法!),该标头使用链表表示返回新的空堆栈

我试图这样做:

type StackLinked struct{
    top *StackLinked 
    next *StackLinked
    data int
    size int
}

func makeStackLinked() Stacker {
    list := &StackLinked{
        top : nil,
        next : nil,
        data : 0,
        size : 0,
    }
    return list;
}

我觉得我可能过于复杂化了(我只使用过C ++中的单链表)。

有没有人对实现StackLinked结构和附带初始化函数的最佳方法有任何建议或建议?

编辑:函数头:func makeStackLinked()StackLinked {}是作业的要求,不能改变。

谢谢!

2 个答案:

答案 0 :(得分:0)

使用以下内容:

type stackElement struct {
    next *stackElement
    data int
}

type StackLinked struct {
    head *stackElement
    n    int
}

func makeStackLinked() Stacker {
    return &StackLinked{}
}

答案 1 :(得分:0)

您可以使用以下内容:

type Student struct {
    Name string     `json:"name"`
    ID string       `json:"id"`
    Next *Student   
}

func (s *Student) Insert(name, sid string) {
    st := &Student {
        Name: name,
        ID: sid,
        Next: s.Next,
    }
    s.Next = st
}

func (s *Student) Show() {
    for st := s.Next; st != nil; st = st.Next {
        fmt.Println(st.Name,st.ID)
    }
}

func main ( ) {

    root := new ( Student )
    root.Insert ( "Juan", "54542" )
    root.Insert ( "Lito", "93828" )

    root.Show()
}

Output:

Lito 93828
Juan 54542