feat(stack): implement stack in golang code
This commit is contained in:
		
							
								
								
									
										73
									
								
								codes/go/chapter_stack_and_queue/array_stack.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								codes/go/chapter_stack_and_queue/array_stack.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| // File: array_stack.go | ||||
| // Created Time: 2022-11-26 | ||||
| // Author: Reanon (793584285@qq.com) | ||||
|  | ||||
| package chapter_stack_and_queue | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // ArrayStack 基于数组实现的栈 | ||||
| type ArrayStack struct { | ||||
| 	data []int // 数据 | ||||
| } | ||||
|  | ||||
| func NewArrayStack() *ArrayStack { | ||||
| 	return &ArrayStack{ | ||||
| 		// 设置栈的长度为 0,容量为 16 | ||||
| 		data: make([]int, 0, 16), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Size 栈的长度 | ||||
| func (s *ArrayStack) Size() int { | ||||
| 	return len(s.data) | ||||
| } | ||||
|  | ||||
| // IsEmpty 栈是否为空 | ||||
| func (s *ArrayStack) IsEmpty() bool { | ||||
| 	return s.Size() == 0 | ||||
| } | ||||
|  | ||||
| // Push 入栈 | ||||
| func (s *ArrayStack) Push(v int) { | ||||
| 	// 切片会自动扩容 | ||||
| 	s.data = append(s.data, v) | ||||
| } | ||||
|  | ||||
| func (s *ArrayStack) Pop() any { | ||||
| 	// 弹出栈前,先判断是否为空 | ||||
| 	if s.IsEmpty() { | ||||
| 		return nil | ||||
| 	} | ||||
| 	val := s.Peek() | ||||
| 	s.data = s.data[:len(s.data)-1] | ||||
| 	return val | ||||
| } | ||||
|  | ||||
| func (s *ArrayStack) Peek() any { | ||||
| 	if s.IsEmpty() { | ||||
| 		return nil | ||||
| 	} | ||||
| 	val := s.data[len(s.data)-1] | ||||
| 	return val | ||||
| } | ||||
|  | ||||
| func (s *ArrayStack) Print() { | ||||
| 	fmt.Println(s.toString()) | ||||
| } | ||||
|  | ||||
| func (s *ArrayStack) toString() string { | ||||
| 	var builder strings.Builder | ||||
| 	if s.IsEmpty() { | ||||
| 		return "empty stack" | ||||
| 	} | ||||
| 	for i := len(s.data) - 1; i > 0; i-- { | ||||
| 		builder.WriteString(strconv.Itoa(s.data[i]) + " -> ") | ||||
| 	} | ||||
| 	builder.WriteString(strconv.Itoa(s.data[0])) | ||||
| 	return builder.String() | ||||
| } | ||||
		Reference in New Issue
	
	Block a user