手写Golang泛型栈和队列的库函数

package main import ( "fmt" "github.com/xzhHas/tools/queue" "github.com/xzhHas/tools/stack" "testing" ) type CustomStruct struct { ID int Name string Age int Sex bool Data []byte } func BenchmarkStackAndQueue(b *testing.B) { // 测试 int 类型 b.Run("TestIntStack", func(b *testing.B) { s1 := stack.NewStackArray[int]() b.ResetTimer() // 重置计时器,防止初始化时间被计算进来 for i := 0; i < 100000; i++ { s1.Push(i) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s1.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s1.Pop() } }) b.Run("TestIntStackList", func(b *testing.B) { s2 := stack.NewStackList[int]() b.ResetTimer() for i := 0; i < 100000; i++ { s2.Push(i) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s2.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s2.Pop() } }) b.Run("TestIntQueueArray", func(b *testing.B) { q4 := queue.NewQueueArray[int]() b.ResetTimer() for i := 0; i < 100000; i++ { q4.Enqueue(i) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q4.Front() // 获取队列头部元素 _, _ = q4.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q4.Dequeue() } }) b.Run("TestIntQueueList", func(b *testing.B) { q3 := queue.NewQueueList[int]() b.ResetTimer() for i := 0; i < 100000; i++ { q3.Enqueue(i) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q3.Front() // 获取队列头部元素 _, _ = q3.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q3.Dequeue() } }) // 测试 string 类型 b.Run("TestStringStack", func(b *testing.B) { s1 := stack.NewStackArray[string]() b.ResetTimer() for i := 0; i < 100000; i++ { s1.Push(fmt.Sprintf("string-%d", i)) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s1.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s1.Pop() } }) b.Run("TestStringStackList", func(b *testing.B) { s2 := stack.NewStackList[string]() b.ResetTimer() for i := 0; i < 100000; i++ { s2.Push(fmt.Sprintf("string-%d", i)) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s2.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s2.Pop() } }) b.Run("TestStringQueueArray", func(b *testing.B) { q4 := queue.NewQueueArray[string]() b.ResetTimer() for i := 0; i < 100000; i++ { q4.Enqueue(fmt.Sprintf("string-%d", i)) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q4.Front() // 获取队列头部元素 _, _ = q4.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q4.Dequeue() } }) b.Run("TestStringQueueList", func(b *testing.B) { q3 := queue.NewQueueList[string]() b.ResetTimer() for i := 0; i < 100000; i++ { q3.Enqueue(fmt.Sprintf("string-%d", i)) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q3.Front() // 获取队列头部元素 _, _ = q3.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q3.Dequeue() } }) // 测试自定义结构体类型 b.Run("TestCustomStructStack", func(b *testing.B) { s1 := stack.NewStackArray[CustomStruct]() b.ResetTimer() for i := 0; i < 100000; i++ { s1.Push(CustomStruct{ID: i, Name: fmt.Sprintf("custom-%d", i)}) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s1.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s1.Pop() } }) b.Run("TestCustomStructStackList", func(b *testing.B) { s2 := stack.NewStackList[CustomStruct]() b.ResetTimer() for i := 0; i < 100000; i++ { s2.Push(CustomStruct{ID: i, Name: fmt.Sprintf("custom-%d", i)}) } // 测试栈顶元素 for i := 0; i < 100000; i++ { _, _ = s2.Peek() // 获取栈顶元素 } for i := 0; i < 100000; i++ { _, _ = s2.Pop() } }) b.Run("TestCustomStructQueueArray", func(b *testing.B) { q4 := queue.NewQueueArray[CustomStruct]() b.ResetTimer() for i := 0; i < 100000; i++ { q4.Enqueue(CustomStruct{ID: i, Name: fmt.Sprintf("custom-%d", i)}) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q4.Front() // 获取队列头部元素 _, _ = q4.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q4.Dequeue() } }) b.Run("TestCustomStructQueueList", func(b *testing.B) { q3 := queue.NewQueueList[CustomStruct]() b.ResetTimer() for i := 0; i < 100000; i++ { q3.Enqueue(CustomStruct{ID: i, Name: fmt.Sprintf("custom-%d", i)}) } // 测试队列头尾元素 for i := 0; i < 100000; i++ { _, _ = q3.Front() // 获取队列头部元素 _, _ = q3.Back() // 获取队列尾部元素 } for i := 0; i < 100000; i++ { _, _ = q3.Dequeue() } }) }
上一篇:cv::Mat初始化、赋值初始化与访问方式


下一篇:计算机网络:运输层 —— 运输层概述