제주 탈출 일지

양방향 연결리스트(DLinkedList) - C++ 본문

C++

양방향 연결리스트(DLinkedList) - C++

귀건 2020. 9. 3. 21:54
728x90
반응형

더미노드가 포함된 양방향 연결리스트를 짜고 싶었는데, 망했다.

이게 오류가 나는데 왜 나는지 도저히 모르겠는차에, 이전에 공부를 위해서 불렀던 C++ 기초 플러스가 와서

그냥 올리고 C++ 기초 플러스를 공부하려고 한다.

나중에 다시 짜면 분명 오류가 보일것,,,

 

 

DLinkedList.h

#ifndef DLINKEDLIST_H
#define DLINKEDLIST_H

template
<typename T>
class List
{
	private:
	
		int numOfData;
		typedef struct Node_
		{
			T data;
			Node_* next;
			Node_* prev;
		}Node;
	
		Node* cur;
		Node* head;

	public:

		List()
		{
			numOfData = 0;
			cur = nullptr;
			head = (Node*)malloc(sizeof(Node));
			head->next = nullptr;
			head->prev = nullptr;
		}

		void LInsert(T data);

		bool LPrevious(T& data);

		int LCount()
		{
			return numOfData;
		}
		
		bool LFirst(T& data);

		bool LNext(T& data);

		T LRemove();

};




#endif

 

 

DLinkedList.cpp

 

#include "DLinkedList.h"

template
<typename T>
void List<T>::LInsert(T idata)
{
	
	Node* NewNode = (Node*)malloc(sizeof(Node));
	
	if (NewNode == nullptr)
	{
		return;
	}
	
	NewNode->data = idata;
	
	NewNode->next = head->next;
	
	NewNode->prev = head;
	
	NewNode->next->prev = NewNode;// 이게 왜?
	
	head->next = NewNode;
	

	numOfData++;
}

template
<typename T>
bool List<T>::LFirst(T& data)
{
	if (head->next == nullptr)
	{
		return false;
	}
	
	cur = head->next;
	data = cur->data;

	return true;
}

template
<typename T>
bool List<T>::LNext(T& data) 
{
	if (cur->next == nullptr)
	{
		return false;
	}

	cur = cur->next;
	data = cur->data;

	return true;
}

template
<typename T>
bool List<T>::LPrevious(T& data)
{
	if (cur->prev == head)
	{
		return false;
	}

	cur = cur->prev;
	data = cur->data;

	return true;
}


template
<typename T>
T List<T>::LRemove()
{
	if (cur == head)
	{
		return;
	}
	

	Node* rNode = cur;
	T rdata = rNode->data;
	cur->prev->next = cur->next;
	cur->next->prev = cur->prev;
	free(rNode);

	return rdata;


}

 

main.cpp

 

#include <iostream>
using namespace std;

#include "DLinkedList.cpp"


int main()
{
	List<int> DList;

	DList.LInsert(1); // 오류 발생!




	return 0;
}

 

728x90
반응형

'C++' 카테고리의 다른 글

vector 컨테이너  (0) 2020.10.10
연산자 오버로딩 예제  (0) 2020.09.30
스마트 포인터(smart pointer)  (0) 2020.08.18
템플릿 (함수, 클래스)  (0) 2020.08.17
추상 클래스(abstract class)  (0) 2020.08.17
Comments