这是使用matlab的面向对象功能进行的粗略的第一步。 创建类的原因是从句柄类型中获取引用语义,这允许出队/入队功能直接修改单元格数组,从而无需重新分配。
我相信下面的代码示例回答了您有关如何在不留空单元格的情况下出队的主要问题(可以在没有OOP方法的情况下使用,以达到相同的效果)。
要回答有关搜索错误的问题:1)比较q{i} == item会给您带来问题,因为==比较字符(如果字符串大小不匹配,则会失败),而您想使用isequal() ; 2)您想要sprintf而不是fprintf ; 和3)并非严格错误,但循环中的else发生在每个不匹配的项目上,这可能不是您想要的。
classdef Queue < handle
properties
data = {}
end
methods
function q = Queue()
% TODO: do something in constructor if desired
end
function item = dequeue(q)
% TODO: bounds check
item = q.data(1);
q.data = q.data(2:end);
end
function enqueue(q,item)
q.data{end+1} = item;
end
function answer = search(q, item)
% TODO: check for multiple occurrences
answer = 'NOT FOUND';
for i = 1:length(q.data)
if isequal(q.data{i},item)
answer = sprintf('FOUND AT INDEX %d',i);
break
end
end
end
end
end