Creating Linked Lists in Python

Aaron Brady castironpi at gmail.com
Sat Mar 21 09:23:08 EDT 2009


On Mar 21, 8:11 am, "andrew cooke" <and... at acooke.org> wrote:
> J-Burns wrote:
snip
> > For example, this means that there can be a start node supposedly.
> > Having a value of 0. It is pointing to node 1 with the value of "a"
> > and to node 2 with the value of "b". Trying to make something like an
> > NFA. Where id be changing regular expressions to NFAs.
>
> > How can I do this? And if I could do this by some other way than using
> > linked lists than do tell me about that as well.
>
> when you mention NFAs and regular expressions, you make me think that you
> don't want a linked list at all, but a graph.  there are various ways of
> storing a graph, but one of the simplest is to use a dict() that maps from
> source to destination node(s).
>
> in your case you could use ints for the nodes and a dict([int]) for the
> graph.  so:
>
> {1: [2,3], 2: [3], 3: [3]}
>
> is a graph in which 1 and 2 are connected in each direction, both 1 and 2
> are linked to 3, and 3 has a loop that links back to itself.
>
> andrew

WARNING, spoiler.

So far, Andrew's and John's structures can be used for both a DFA and
a NFA.  The only thing further you need is a collection instead of a
single value to hold current state.

states= set( [ 1 ] )
while 1:
  _newstates= set( )
  for state in states:
    _newstates.update( transitions[ state ] )
  states= _newstates
  # or states.clear( ); states.update( _newstates )

How will you mark a state as 'final'/ success?



More information about the Python-list mailing list