链式栈

链式栈

先进后出,FILO(first in last out)

入栈出栈都属于增删操作

操作方法

创建链式栈
打印链式栈
压栈
出栈

go实现

创建

type StackNode struct {
	Data interface{}
	Next *StackNode
}

func CreateStack(Data ...interface{}) *StackNode {
	if Data == nil {
		return nil
	}
	if len(Data) == 0 {
		return nil
	}

	//创建链式栈对象
	var stack *StackNode

	//循环借助Data创建结点,并且按栈形数据结构,组织数据
	for _, v := range Data {
		newNode := new(StackNode)
		newNode.Data = v

		newNode.Next = stack
		stack = newNode
	}
	return stack
}

打印链式栈

func PrintStack(s *StackNode) {
	if s == nil {
		return 
	}
	for s != nil {
		fmt.Println(s.Data)
		s = s.Next
	}
}

压栈(单向链表的头插法)

func PushStack(stack *StackNode, Data interface{}) *StackNode {
	//容错
	if s == nil {
		return nil
	}
	if Data == nil {
		return s
	}
	
	//创建新结点
    newNode := new(StackNode)
    newNode.Data = v
	//压栈
	newNode.Next = stack
	stack = newNode
	
	return stack
}

出栈

func PopStack(stack *StackNode) (*StackNode, interface{}) {
	//容错
	if s == nil {
		return nil
	}	
	return stack.Next, stack.Data
}
上一篇:数据结构和算法基础之栈的链式存储


下一篇:带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后