Как я могу добавить в реализацию CStack метод, обращающий буфер со следующим объявлением: function reverse (obj) Метод должен изменить порядок элементов в стеке.
Например, если изначально стек содержал следующие элементы: 16 5 9 4 2? ? ? Затем, после применения обратной функции, он должен содержать элементы: 2 4 9 5 16? ? ?
classdef CStack < handle
% s = CStack(c); c is a cell, and could be omitted
% s.size() returns the numbre of elements
% s.isempty() returns true when the stack is empty
% s.empty() deletes the content of the stack
% s.push(el) pushes el to the top of stack
% s.pop() pops out the top of the stack, and returns the element
% s.top() returns the top element of the stack
% s.remove() removes all the elements in the stack
% s.content() returns all the data of the stack (in the form of a cell with size [s.size(), 1]
%
% Copyright: zhang@zhiqiang.org, 2010.
% url: http://zhiqiang.org/blog/it/matlab-data-structures.html
properties (Access = private)
buffer;
cur;
capacity;
end
methods
function obj = CStack(c)
if nargin >= 1 && iscell(c)
obj.buffer = c(:);
obj.cur = numel(c);
obj.capacity = obj.cur;
elseif nargin >= 1
obj.buffer = cell(100, 1);
obj.cur = 1;
obj.capacity =100;
obj.buffer{1} = c;
else
obj.buffer = cell(100, 1);
obj.capacity = 100;
obj.cur = 0;
end
end
function s = size(obj)
s = obj.cur;
end
function remove(obj)
obj.cur = 0;
end
function b = empty(obj)
b = obj.cur;
obj.cur = 0;
end
function b = isempty(obj)
b = ~logical(obj.cur);
end
function push(obj, el)
if obj.cur >= obj.capacity
obj.buffer(obj.capacity+1:2*obj.capacity) = cell(obj.capacity, 1);
obj.capacity = 2*obj.capacity;
end
obj.cur = obj.cur + 1;
obj.buffer{obj.cur} = el;
end
function el = top(obj)
if obj.cur == 0
el = [];
warning('CStack:No_Data', 'trying to get top element of an emtpy stack');
else
el = obj.buffer{obj.cur};
end
end
function el = pop(obj)
if obj.cur == 0
el = [];
warning('CStack:No_Data', 'trying to pop element of an emtpy stack');
else
el = obj.buffer{obj.cur};
obj.cur = obj.cur - 1;
end
end
function disp(obj)
if obj.cur
for i = 1:obj.cur
disp([num2str(i) '-th element of the stack:']);
disp(obj.buffer{i});
end
else
disp('The stack is empty');
end
end
function c = content(obj)
c = obj.buffer(1:obj.cur);
end
function reverse(obj)
obj.buffer(1:obj.capacity) = fliplr(obj.buffer(1:obj.capacity));
end
end
end
I would appreciate any tips on how to fix my code. Thanks in advance.
проверка кода с помощью:
s1 = CStack({1,2,3,'GGG'});
s1.reverse(); disp('----'); disp(s1);
s1.push(5);
s1.reverse(); disp('----'); disp(s1);
s1.empty(); disp('----');
s1.reverse(); disp(s1);
ожидаемый результат:
---- 1-th element of the stack:
GGG
2-th element of the stack:
3
3-th element of the stack:
2
4-th element of the stack:
1
---- 1-th element of the stack:
5
2-th element of the stack:
1
3-th element of the stack:
2
4-th element of the stack:
3
5-th element of the stack:
GGG
---- The stack is empty