R语言队列结构实现
大家好,这里是想做生信大恐龙🦖的生信小白。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天讲一下队列结构。
前言
队列是一种“先进先出”的数据结构,可以将队列看成去食堂打饭这一事件,先到的“数据”先“打饭”。
一、简单实现队列数据结构
可以使用三个函数简单实现队列数据结构:
Enqueue:向队尾添加数据。
Dequeue:向队首获取数据,并将其从队列中删除。
Size:获取当前队列长度。
queue <- c() #创建空队列
q_size <- 0 #创建为0的队列长度变量
#定义enqueue函数
enqueue <- function(data){
queue <<- c(queue,data) #对全局变量queue进行修改
q_size <<- q_size + 1 #队列长度增加一个单位
}
#定义dequeue函数
dequeue <- function(){
first_element <- queue[1] #将queue第一个元素赋给变量
queue <<- queue[-1] #删除queue第一个元素
q_size <<- q_size - 1 #队列长度减少一个单位
return(first_element)
}
#定义size函数
size <- function(){
return(q_size)
}
二、队列数据结构升级版
上诉代码中由于queue为全局变量,可以在其他地方直接操作,而不通过我们定义的相关函数,这会导致数据的完整性被破坏。举个例子:
> enqueue(1)
> queue <- c(queue,5)
> print(size())
[1] 1
> dequeue()
[1] 1
> dequeue()
[1] 5
> print(size())
[1] -1
可以看到在别处操作之后,导致队列长度输出为-1。所以我们对函数进行简单的修改。
#定义队列函数
queue <- function(){
queue <- c() #创建空队列
q_size <- 0 #创建为0的队列长度变量
#定义enqueue函数
enqueue <- function(data){
queue <<- c(queue,data) #对全局变量queue进行修改
q_size <<- q_size + 1 #队列长度增加一个单位
}
#定义dequeue函数
dequeue <- function(){
first_element <- queue[1] #将queue第一个元素赋给变量
queue <<- queue[-1] #删除queue第一个元素
q_size <<- q_size - 1 #队列长度减少一个单位
return(first_element)
}
#定义size函数
size <- function(){
return(q_size)
}
return(list(enqueue=enqueue, dequeue=dequeue,size=size))
}
将queue放入函数体中即可避免上述问题。
总结
编写队列结构代码有以下优点:
1.人们无法从外部直接访问内部数据,隐藏了内部实现。
2.有效防止部分用户对数据进行错误操作,避免对数据造成损伤。
以上就是今天要讲的内容,看到这里的小伙伴给大恐龙🦖点点赞,点点关注!有问题可以留言交流哦!