Are there any 'bounded container' libraries available to Matlab users?
    7 views (last 30 days)
  
       Show older comments
    
    Martin Dowie
 on 24 Jul 2015
  
    
    
    
    
    Answered: Martin Dowie
 on 4 Aug 2017
            Vectors are supported but is there a ready-rolled library that can implement a 'bounded doubly linked list' using Matlab vectors?
1 Comment
  Cedric
      
      
 on 28 Jul 2015
				
      Edited: Cedric
      
      
 on 28 Jul 2015
  
			EDIT @ 5:26pm : small correction to destructor.
Depending what you need to achieve, you could build a "handle" class which does the trick. Have you tried?
I used my 10 minutes pause for building a very small example:
 classdef Node < handle
    % Basic example of doubly-linked list.
    properties
        nodeForward  = []
        nodeBackward = [] 
        content      = []
    end
    methods
        function obj = Node( content, nodeBackward, nodeForward )
            % Constructor.
            if nargin > 0,  obj.content = content ;  end
            if nargin > 1,  obj.nodeBackward = nodeBackward ;  end
            if nargin > 2,  obj.nodeForward = nodeForward ;  end
        end
        function node = addNodeForward( obj, node )
            % Add forward node and double-link.
            if ~isa( node, 'Node' )
                node = Node( node ) ;
            end
            obj.nodeForward = node ;
            obj.nodeForward.nodeBackward = obj ;
        end
        function node = addNodeBackward( obj, node )
            % Add backward node and double-link.
            if ~isa( node, 'Node' )
                node = Node( node ) ;
            end
            obj.nodeBackward = node ;
            obj.nodeBackward.nodeForward = obj ;
        end
        function displayForward( obj, depth )
            % Display current and call forward (if present) display.
            disp( obj ) ;
            if nargin < 2,  depth = Inf ; end
            if ~isempty( obj.nodeForward )
                obj.nodeForward.displayForward( depth-1 ) ;
            end
        end
        function displayBackward( obj, depth )
            % Display current and call backward (if present) display.
            disp( obj ) ;
            if nargin < 2,  depth = Inf ; end
            if ~isempty( obj.nodeBackward )
                obj.nodeBackward.displayBackward( depth-1 ) ;
            end
        end
        function delete( obj )
            % Destructor: cut and merge.
            if ~isempty( obj.nodeForward )
                if ~isempty( obj.nodeBackward )
                    obj.nodeBackward.nodeForward = obj.nodeForward ;
                    obj.nodeForward.nodeBackward = obj.nodeBackward ;
                else
                    obj.nodeForward.nodeBackward = [] ;                   
                end
            elseif ~isempty( obj.nodeBackward )
                obj.nodeBackward.nodeForward = [] ;
            end
        end
        function disp( obj )
            % Display content instead of obj properties.
            % -> comment for debugging
            disp( obj.content ) ;
        end
    end
 end
With this, we can do e.g.
 clear ;
 clc ;
 nodeStart = Node( 10 ) ;
 node      = nodeStart.addNodeForward( magic(3) ) ;
 nodeEnd   = node.addNodeForward( {'John', 'Doe'} ) ;
 fprintf( 'Display forward from start.\n\n')
 nodeStart.displayForward
 fprintf( 'Delete middle node and display forward from start.\n\n')
 delete( node )
 nodeStart.displayForward
and we get
 Display forward from start.
    10
     8     1     6
     3     5     7
     4     9     2
    'John'    'Doe'
 Delete middle node and display forward from start.
    10
    'John'    'Doe'
Accepted Answer
  Udaya Mallampati
    
 on 27 Jul 2015
        
      Edited: Udaya Mallampati
    
 on 27 Jul 2015
  
      Hi Martin,
This functionality to implement bounded doubly linked list is not currently available. I work for MathWorks and have forwarded your feedback to the appropriate team.
2 Comments
More Answers (1)
See Also
Categories
				Find more on Argument Definitions in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


