ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조...18
    일지 2020. 10. 18. 17:01

    이중 연결 리스트 구현

    단일 연결 리스트의 이해를 기반으로 C#의 LinkedList<T>를 간략화하여 int만 저장할 수 있는 DoublyLinkedList를 만든다.

     

    구현이 필요한 메서드 및 속성은 다음과 같다.

     

    • 생성자
      • DoublyLinkedList() 비어있는 인스턴스 생성
      • DoublyLinkedList(DoublyLinkedList&) 다른 DoublyLinkedList 데이터로 인스턴스 생성
    • 속성 
      • Count 사용되고 있는 노드의 수
      • First 리스트의 처음 노드
      • Last 리스트의 마지막 노드
    • 메서드 
      • AddFirst(data) 시작 위치에 데이터를 포함한 노드 생성 후 삽입
      • AddFirst(node) 지정된 노드 삽입
      • AddLast(data) 시작 위치에 데이터를 포함한 노드 생성 후 삽입
      • AddLast(node) 지정된 노드 삽입
      • Insert(int, data) 지정된 위치에 데이터를 포함한 노드 생성 후 삽입
      • Insert(int, node) 지정된 위치에 지정된 노드 삽입
      • RemoveFirst(data) 가장 처음 일치한 데이터를 포함한 노드 삭제
      • RemoveLast(data) 가장 마지막 일치한 데이터를 포함한 노드 삭제
      • Remove(node) 지정된 노드와 동일한 노드 삭제
      • Clear() 모든 노드 삭제
      • Contains(data) 데이터를 포함한 노드의 존재 여부 확인
      • Contains(node) 지정된 노드의 존재 여부 확인
      • Find(data) 가장 처음 일치한 데이터를 포함하는 노드 반환
      • FindLast(data) 가장 마지막 일치한 데이터를 포함하는 노드 반환

     

    DoublyLinkedList.h

    #pragma once
    #include <xutility>
    #include <iostream>
    
    struct DoublyLinkedListNode
    {
    	DoublyLinkedListNode() {}
    	DoublyLinkedListNode(int value) { m_data = value; }
    
    	int m_data = 0;
    	DoublyLinkedListNode* m_prev = nullptr;
    	DoublyLinkedListNode* m_next = nullptr;
    };
    
    class DoublyLinkedList
    {
    public:
    #pragma region 생성자
    	DoublyLinkedList();
    	DoublyLinkedList(const DoublyLinkedList& other);
    	~DoublyLinkedList();
    #pragma endregion
    
    #pragma region 속성
    	const int Count() { return m_count; }
    	DoublyLinkedListNode& First() { return *m_head; }
    	DoublyLinkedListNode& Last() { return *m_tail; }
    #pragma endregion
    
    #pragma region 메서드
    	void AddFirst(int value);
    	void AddFirst(DoublyLinkedListNode* node);
    	void AddLast(int value);
    	void AddLast(DoublyLinkedListNode* node);
    	void Insert(int index, int value);
    	void Insert(int index, DoublyLinkedListNode* node);
    
    	bool RemoveFirst(int value);
    	bool RemoveLast(int value);
    	void Remove(const DoublyLinkedListNode* node);
    	void Clear();
    
    	bool Contains(int value);
    	bool Contains(const DoublyLinkedListNode* node);
    	DoublyLinkedListNode* Find(int value);
    	DoublyLinkedListNode* FindLast(int value);
    
    	void PrintInfo();
    #pragma endregion
    
    private:
    #pragma region Class Util
    	DoublyLinkedListNode* PopNode(int value);
    	void PushNode(DoublyLinkedListNode* node);
    #pragma endregion
    	
    private:
    #pragma region 변수
    	size_t m_count;
    	DoublyLinkedListNode* m_head;
    	DoublyLinkedListNode* m_tail;
    	DoublyLinkedListNode* m_free;
    #pragma endregion
    };

     

    댓글

Designed by Tistory.