Golang练习用的队列

本文详细介绍了一种使用Go语言实现的通用队列结构,该队列能够存储任意类型的元素,通过接口方式确保了队列的灵活性和泛用性。文章深入探讨了队列的初始化、入队、出队等核心操作的实现细节,并通过具体示例展示了队列的使用方法。
package main

import (
   "fmt"
)
/***
 * 构造节点,用接口类型,可以
 * 入队列,出队列任意类型
 */
type Item interface {

}

/***
 * 定义队列链
 */ 
type ItemQueue struct{
   items []Item
}

/***
 * 定义队列链接口
 */ 
type QueueIterface interface {
   Init() ItemQueue
   Push(t Item) ItemQueue
   Pop() *Item
   IsEmpty() bool
   Size() int
}

/***
 * 初始化队列
 */
func (s *ItemQueue) Init() *ItemQueue{
   s.items = []Item{}
   return s
}

/***
 * 入队列
 */
func (s *ItemQueue) Push(t Item) *ItemQueue{
   //append方法可以动态改变数组的长度
   s.items = append(s.items,t)
   return s
}

/***
 * 出队列
 */
func (s *ItemQueue) Pop() *Item{
   //获取队列顶端的数据
   item := s.items[0]
   //改变队列长度 
   s.items = s.items[1:len(s.items)]
   return &item
}

func (s *ItemQueue) IsEmpty() bool{
   return len(s.items) == 0
}

func (s *ItemQueue) Size() int{
   return len(s.items)
}

type Node struct {
   index int
   data  string
}



func main()  {
   var queue ItemQueue
   if queue.items == nil{
      itemQueu := ItemQueue{}
      queue = *itemQueu.Init()
   }

   intf := func(val interface{})(item int,res bool){
        //断言判断是否是int类型,并返回当前数据
        p,ok := interface{}(val).(int)
        item = 0
        res = false
        if ok {
           item = p
           res = true
      }
        return item,res
   }

   nodef := func(val interface{})(n Node,res bool){
      //断言判断是否是Node类型,并返回当前数据
      p,ok := interface{}(val).(Node)
      n = Node{}
      res = false
      if ok {
         n = p
         res = true
      }
      return n,res
   }

   getPop := func(queue *ItemQueue) {
      if !queue.IsEmpty(){
         node := *queue.Pop()
         item,res := intf(node)
         if res {
            fmt.Println(item)
         }
         n,res := nodef(node)
         if res {
            fmt.Println(n.data)
         }
      }

   }

   queue.Push(1)
   queue.Push(2)
   queue.Push(Node{1,"Hello World"})
   queue.Push(Node{2,"GoLang is Good"})
   getPop(&queue)
   getPop(&queue)
   getPop(&queue)
   getPop(&queue)
   getPop(&queue)
   getPop(&queue)
   getPop(&queue)

}
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值