`
qq466862016
  • 浏览: 125702 次
  • 来自: 杭州
社区版块
存档分类
最新评论

数据结构与算法-队列

阅读更多

数据结构与算法-队列

一、概述

           队列也是一种表,是一种先进先出、从队头删除、从队尾删除的一种数据结构。队列这种数据结构在实际的项目中用的也是比较多,比如消息中间件 消息队列等。队列的插入我们称为入队操作。从队列中移除我们称为出队操作。队列和栈一样每个操作都是O(1)

 

 

 

            队列的基本操作有:

           1、初始化队列

           2、入队

           3、出队

           4、判空

           5、获取队头元素

          6、获取队尾元素

          7、获取队列的大小

 

 

下面是golang 实现

package queue

import (
	"fmt"
)

// define a node
type Node interface{}

// 队列
type Queue struct {
	Data Node
	Next *Queue
}

func InitQueue() *Queue {

	q := &Queue{}
	q.Next = nil
	return q
}

// 判空
func IsEmpty(q *Queue) bool {

	return q.Next == nil

}

// 入队
func EnQueue(q *Queue, data Node) {

	p := &Queue{}
	p.Data = data
	p.Next = nil

	if q.Next == nil {
		q.Next = p
	} else {
		s := q

		for s.Next != nil {

			s = s.Next
		}
		s.Next = p
	}

}

// 出队
func DeQueue(q *Queue) Node {

	if IsEmpty(q) {
		return nil
	} else {
		s := q.Next

		if s.Next == nil {
			q.Next = nil
		} else {
			q.Next = s.Next

		}
		return s.Data
	}
}

// 大小
func Size(q *Queue) int {

	if IsEmpty(q) {
		return 0
	}

	s := q
	var size int
	for s.Next != nil {
		size++
		s = s.Next
	}

	return size
}

//打印
func Print(q *Queue) {

	if IsEmpty(q) {
		return
	}

	s := q
	for s.Next != nil {

		fmt.Println(s.Data)
		s = s.Next
	}
}

// 头部
func Header(q *Queue) Node {

	if IsEmpty(q) {
		return nil
	}

	return q.Next.Data
}

// 尾部
func Tail(q *Queue) Node {

	if IsEmpty(q) {
		return nil
	}

	s := q
	for s.Next != nil {

		s = s.Next
	}

	return s.Next.Data
}

 

  • 大小: 230.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics