GO 语言队列实现
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的t(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。如下图:
package main import (
"fmt"
) type QueueNode struct {
Data interface{}
Next *QueueNode
} //创建链列(数据)
func (queue *QueueNode) Create(Data ...interface{}) {
if queue == nil {
return
}
if len(Data) == 0 {
return
} //创建链列
for _, v := range Data {
newNode := new(QueueNode)
newNode.Data = v queue.Next = newNode
queue = queue.Next
} } //打印链列
func (queue *QueueNode) Print() {
if queue == nil {
return
}
for queue != nil {
if queue.Data != nil {
fmt.Print(queue.Data, " ")
}
queue = queue.Next
}
fmt.Println()
} //链列个数
func (queue *QueueNode) Length() int {
if queue == nil {
return -1
} i := 0
for queue.Next != nil {
i++
queue = queue.Next
}
return i
} //入列(insert)
func (queue *QueueNode) Push(Data interface{}) {
//放在队列的末尾 if queue == nil {
return
}
if Data == nil {
return
} //找到队列末尾
for queue.Next != nil {
queue = queue.Next
} //创建新节点 将新节点加入队列末尾
newNode := new(QueueNode)
newNode.Data = Data queue.Next = newNode
} //出队(delete)
func (queue *QueueNode) Pop() {
//队头出列
if queue == nil {
return
}
//记录列队第一个的节点
//node:=queue.Next
//queue.Next=node.Next queue.Next = queue.Next.Next
}
GO 语言队列实现的更多相关文章
- C语言 队列 链式结构 实现
一个C语言链式结构实现的队列 mQueue (GCC编译). /** * @brief C语言实现的链式队列 * @author wid * @date 2013-10-31 * * @note 若代 ...
- C语言 队列 顺序结构 实现
一个能够自动扩容的顺序结构的队列 ArrQueue (GCC编译). /** * @brief C语言顺序结构队列的实现 * @author wid * @date 2013-10-30 * * @n ...
- C语言队列的实现
队列是常用的数据结构之一,下面给出一个链式队列的实现: 头文件Queue.h #ifndef Queue_H #define Queue_H typedef int Item; typedef str ...
- [数据结构]C语言队列的实现
我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...
- C语言队列(数组内核)
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>struct Queue{ int *pBase; ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- InfoQ 趋势报告:架构和设计领域技术演变详解
https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...
- 二级C复习
二级C语言 队列 计算队列中元素个数 种 : rear > front ,直接减 第二种: rear < front 上面两种综合一起,求元素个数公式 :(r - f + maxsize) ...
- 数据结构(c语言第2版)-----了解链表,栈,队列,串
关于链表我觉得这都是最基本的东西,但是不常见,在实际的应用中很少的使用,了解它会用就OK,不需要研究的那么深,除非做那种内存压缩,存储方面工作. C语言中动态申请空间 malloc() q=(dlin ...
随机推荐
- lua编译器和ide
这里有一个网址,上面记录了大部分流行的LUA开发工具,包括IDE和Editor. http://www.wowwiki.com/Lua_editors 一.Eclipse LDT 1.语法高亮,自动提 ...
- ioctl接口内容操作
int ioctl( int fd, int request, .../* void *arg */ ) 详解 第三个参数总是一个指针,但指针的类型依赖于request 参数.我们可以把和网络相关的请 ...
- PTA(Advanced Level)1042.Shuffling Machine
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- PTA(Basic Level)1029.旧键盘
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 2 行中分别给出应该输入的文字.以及 ...
- 如何解决Oracle11g使用dmp命令无法导出空表问题
如何解决Oracle11g使用dmp命令无法导出空表问题 导出:exp username/password@orcl file=路径 tables=(tb1) //tables=(tb1)可有 ...
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话
原文:https://zhuanlan.zhihu.com/p/31310536 /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行 ...
- docker-文件系统出错处理
Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2 2018年03月17日 22: ...
- P3586 [POI2015]LOG
传送门 对于询问,首先如果正数数量不到 $c$ 个显然无解 然后如果大于等于 $s$ 的数大于等于 $c$ 个,那么显然有解 否则,考虑贪心地取数,首先初始大于等于 $s$ 的哪些数我们每次取都可以取 ...
- Java线程和进程
一.线程 1.什么是线程: 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程至少包含一个线程,也可以多个,线程属于进程. 2.Java中线程经历的四个 ...
- css样式水平居中和垂直居中的方法
水平居中(包含块中居中) 1. 定宽,左右margin为auto.(常规流块盒.弹性项目[不用定宽]) 例子:在box1盒子上设置宽,再设置margin:auto: <style> .bo ...