队列
- 队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。
- 队列是广度遍历
- 栈是深度遍历
- 递归也是深度遍历
package Queue
type MyQueue interface {
Size()int
Front() interface{}
End() interface{}
IsEmpty() bool
EnQueue(data interface{})
DeQueue() interface{}
Clear()
}
type Queue struct {
dataStore []interface{}
theSize int
}
func NewQueue()* Queue {
myQueue := new(Queue)
myQueue.dataStore = make([]interface{}, 0)
myQueue.theSize = 0
return myQueue
}
func(myq *Queue) Size()int{
return myq.theSize
}
func(myq *Queue)Front() interface{}{
if myq.Size() == 0 {
return nil
}
return myq.dataStore[0]
}
func(myq *Queue)End() interface{}{
if myq.Size() == 0 {
return nil
}
return myq.dataStore[myq.Size() - 1]
}
func(myq *Queue)IsEmpty() bool{
return myq.theSize == 0
}
func(myq *Queue)EnQueue(data interface{}){
myq.dataStore = append(myq.dataStore, data)
myq.theSize++
}
func(myq *Queue)DeQueue() interface{}{
if myq.Size() == 0 {
return nil
}
data := myq.dataStore[0]
if myq.Size() > 1 {
myq.dataStore = myq.dataStore[1:myq.Size()]
} else {
myq.dataStore = make([]interface{}, 0)
}
myq.theSize--
return data
}
func(myq *Queue)Clear(){
myq.dataStore = make([]interface{}, 0)
myq.theSize = 0
}
package main
import (
"godemo01/Queue"
"fmt"
)
func main() {
myq := Queue.NewQueue()
myq.EnQueue(1)
myq.EnQueue(2)
myq.EnQueue(3)
myq.EnQueue(4)
fmt.Println(myq.DeQueue())
fmt.Println(myq.DeQueue())
fmt.Println(myq.DeQueue())
fmt.Println(myq.Size())
fmt.Println(myq.IsEmpty())
}
package main
import (
"godemo01/Queue"
"fmt"
"io/ioutil"
)
func main() {
myq := Queue.NewQueue()
path := "D:\\桌面程序\\ceshi"
files := []string{}
myq.EnQueue(path)
for ;; {
path := myq.DeQueue()
if path == nil {
break
}
read, _ := ioutil.ReadDir(path. (string))
for _, fi := range read {
if fi.IsDir() {
fullDir := path. (string) + "\\" +fi.Name()
files = append(files, fullDir)
myq.EnQueue(fullDir)
} else {
fullDir := path. (string) + "\\" +fi.Name()
files = append(files, fullDir)
}
}
}
for i := 0; i < len(files); i++ {
fmt.Println(files[i])
}
}
