3

以下は、rubyでのCircular double LLの実装です。私はrubyを初めて使用するため(数日未満)、ノードの複雑な構造を作成しました。行を削除する

temp.n.p=temp2 

エラーは解消されますが、それ以外の場合は次のエラーが発生します。-

/home/ghost/Desktop/ruby/ds/test.rb:40:in `insert': undefined method `p=' for #<Cdll:0x000000022bfde8> (NoMethodError)
    from /home/ghost/Desktop/ruby/ds/test.rb:60:in `<main>'

これがコード全体です:-

class Node
    def initialize(a,b,c)
        @data=a
        @next=b
        @prev=c
    end
    def d=(ele)
        @data=ele
    end
    def n=(ele)
        @next=ele
    end
    def p=(ele)
        @prev=ele
    end
    def d
        @data
    end
    def p
        @prev
    end
    def n
        @next
    end


end

class Cdll
    def initialize
        @sentinel=Node.new(nil,self,self)
    end

    def insert(ele)
        temp=@sentinel
        while temp.d!=nil
            temp=temp.n
        end
            temp2=Node.new(ele,temp,temp.n)
            temp.n .p=temp2
            temp.n=temp2
    end


    def search(ele)
        temp=@sentinel.n
        while temp.d!=nil
            if(temp.d==ele)
                return temp
            else
                temp=temp.n
            end
        end
        return nil
    end
end


c=Cdll.new
c.insert(12)
c.insert(14)
if((x=c.search(14))!=nil)
    puts x.d
end

どんな助けでも大歓迎です。

4

1 に答える 1

1

Cdll挿入メソッドを見てください。

 def insert(ele)
   temp=@sentinel
   # @sentinel.n == self 
   # => true
   while temp.d!=nil
     temp=temp.n
   end
   temp2=Node.new(ele,temp,temp.n)
   # temp.n == self
   # => true
   temp.n.p=temp2
   temp.n=temp2
 end

Cdll クラスの新しいインスタンスを作成すると、Node のインスタンスも作成されます。前と次の要素は Cdll のインスタンスです (メソッドp=が存在する Node ではありません)。

実際には二重連結リストではないと思います。おそらく、ノードの前の要素と次の要素もNodeインスタンスにする必要があります

于 2013-03-23T01:37:10.570 に答える