2014-03-12 3 views
1

다른 프로그램에서 import으로 노드를위한 클래스를 만들려고합니다. 나는 다른 프로그램이 잘 작동한다는 것을 알고있다. 동일한 함수 이름을 사용하는 다른 유형의 큐를 import (즉 Pythons regular list을 기반으로했을 때) 작동 할 때부터 작동한다. 그러나이 큐 유형을 사용하면 작동시키지 못할 것 같습니다. 나는 나의 코드에 많은 문제가 있다는 것을 확신한다. (나는 다양한 오류 메시지를 얻고 있기 때문에) 나는 내가 바꿔야 할 것에 대한 약간의 의견을 원한다.연결된 목록에 어떤 문제가 있습니까?

class Node(): 
    def __init__(self, v=None, n=None): 
     self.item=v 
     self.next=n 

    lastnode=__init__ 

    def put(self, v): 
     Node.lastnode.next=self 
     self.item=v 
     self.next=None 
     Node.lastnode=Node.lastnode.next 

    def get(self): 
     if Node.isempty(self): 
      return None 
     out=Node.__init__.next 
     Node.__init__.next=out.next 
     out.next=None 
     return ut.item 

    def isempty(self): 
     if Node.lastnode==Node.__init__: 
      return True 
     else: 
      return False 

put 기능의 역할은 큐의 마지막에 새 항목/노드를하는 것입니다 : 여기

는 클래스에 대한 코드입니다.

get 기능 역할은 첫 번째 노드를 대기열에서 제거하고 return 항목을 제거하는 것입니다.

isempty 기능은 대기열이 비어 있는지 확인하는 기능입니다.

제게이 점에 대해 비판 해주세요.

+1

당신의 질문에 속해 http://codereview.stackexchange.com – martineau

+0

BTW : 내장 명령이 고도로 최적화되어 기억 - 당신이 진짜 당신의 솔루션을 사용하려는 경우 - 라이프 애플 리케이션, 표준 목록을 사용하고, 당신이 그것을 사용하지 않는 좋은 이유가 있다면, 파이썬에서 프로토 타입을 누른 다음 당신을 위해 C 확장을 작성 데이터 구조. –

+0

그래, 나는이 언어를 배우기위한 것일뿐입니다. – user3411693

답변

1

당신의 주된 문제점은 하나의 클래스를 사용하여 정말로 두 개의 클래스가 필요한 문제를 해결하려고한다는 것입니다. 링크 된 목록에는 노드와 목록 구조 자체의 두 가지 항목이 포함됩니다. 노드는 두 가지 사항 만 "인식"합니다 : 포함 된 데이터와 그것이 링크되는 다음 노드의 ID. 목록 객체는 링크 된 노드 그룹에 대한 액세스를 관리합니다. 단일 클래스에서 두 역할을 결합하여 목록을 실현하는 것을 불가능하게 만듭니다. 예를 들어 클래스가 여러 노드를 관리하는 방법을 생각해보십시오. 여러분은리스트 레벨 데이터 (예 : 헤드 노드의 ID)에 클래스 속성을 사용하여 이러한 어려움을 극복하려고 시도하고 있지만 작동하도록 만들 수 있다고해도 작업 할 수있을뿐입니다 한 번에 하나의 목록 인스턴스로.

이 외에도 코드에는 몇 가지 기본적인 구문 문제가 있습니다. 예 : lastnode=__init____init__으로 전화하지 않습니다. 호출 구문은 lastnode=__init__()이지만 클래스 정의의 본문에서는 그렇게 할 수 없습니다. 여기

당신이 공부를 할 수있는 사소한 구현의 :

class Node(object): 

    def __init__(self, value=None, next=None): 
     self.value = value 
     self.next = next 

class List(object): 

    def __init__(self): 
     self.head = None 

    def put(self, value): 
     new = Node(value) 
     new.next = self.head 
     self.head = new 

    def get(self): 
     if self.is_empty(): 
      return None 
     old = self.head 
     self.head = old.next 
     return old.value 

    def is_empty(self): 
     return self.head is None 
+0

대단히 감사합니다! – user3411693

관련 문제