go语言数据结构

2018-07-27  本文已影响0人  Ucan先生

1队列结构

package main

import "fmt"

//定义队列结构
type Queue struct {
    elements []int
}

//工厂方法生成新队列
func NewQueue(len int) *Queue {
    return &Queue{make([]int, len)}
}

//入队
func (q *Queue) Push(e int) () {
    q.elements = append(q.elements, e)
}

//出队
func (q *Queue) Pop() int{
    popElement := q.elements[0]
    q.elements = q.elements[1 : len(q.elements)-1]
    return  popElement
}

//求长
func (q *Queue) Len() int {
    return len(q.elements)
}

func main() {
    q := NewQueue(10)
    q.elements = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
    fmt.Println(q.elements)
    fmt.Println(q.Len())
    fmt.Println(q.Pop())
    fmt.Println(q.Len())
}
package main

//定义节点
type StackNode struct{
    data interface{};
    next *StackNode;
}

//定义栈顶
type stack struct {
    top *StackNode;
}

//创建栈
func createStack() *stack{
    return &stack{};
}

/**
 * 入栈
 */
func (stack *stack)Push(data interface{}){
    //申请节点
    node := StackNode{};
    node.data = data;

    //如果top为空
    if stack.top == nil {
        stack.top = &node;
        return;
    }

    //如果top不为空,交换top与新插入节点的位置
    tmp := stack.top;
    stack.top = &node;
    stack.top.next = tmp;
}

/**
 *出栈
 */
func (stack *stack)Pop()  interface{}{
    //判断是否为空
    if (stack.Empty()) {
        return nil;
    }
    tmp := stack.top;
    stack.top = stack.top.next;
    return tmp;
}

/**
 * 判断栈是否为空
 */
func (stack *stack)Empty() bool{
    if stack.top == nil {
        return true;
    }
    return false;
}

/**
 * 返回栈顶指针
 */
func (stack *stack)Top() *StackNode{
    if stack.Empty()==true {
        return nil;
    }
    return stack.top;
}
package main

import "fmt"

type node struct {
    data interface{};
    next *node;
}

type quene struct {
    front *node;
    rear *node;
}

/**
 * 创建空队列
 */
func createQuene()  *quene{
    quene := quene{};
    node := node{};
    quene.rear = &node;
    quene.front =  &node;
    quene.front.next = nil;
    return &quene;
}

/**
 * 判断节点是否为空
 */
func (quene quene)emptyQuene()bool{
    if quene.front==quene.rear{
        return true;
    }
    return false;
}

/**
 * 队尾入队 队列队首->队尾
 */
func (quene *quene)push(data interface{}){
    node := node{};
    node.data = data;
    node.next = nil;
    if quene.front.next == nil {
        quene.front.next= &node
    }

    //交换尾部
    quene.rear.next = &node;
    quene.rear = &node;
}

/**
 * 出队
 */
func pop(quene *quene) *node{
    isEmpty := quene.emptyQuene();
    if isEmpty==false {
        node := quene.front
        quene.front = quene.front.next;
        return node;
    }
    return nil
}


func main()  {
    stack := createQuene();
    fmt.Println(stack);
    stack.push(1);

    fmt.Println(stack.front.next.data)
    fmt.Println(stack.rear.data)
    //fmt.Println(stack.front.next.next.data)

    stack.push(2);
    fmt.Println(stack.front.next.data)
    fmt.Println(stack.front.next.next.data)
    fmt.Println(stack.rear.data)

    stack.push(3);
    fmt.Println(stack.front.next.data)
    fmt.Println(stack.front.next.next.data)
    fmt.Println(stack.front.next.next.next.data)
    fmt.Println(stack.rear.data)

}

上一篇 下一篇

猜你喜欢

热点阅读