[C++] Linked List 예제

2013. 11. 20. 09:56Coders

자료구조의 기본인 Linked List 예제 입니다.

뭐 좀 하느라 ( 주된 일은 링크드리스트가 아닙니다만 ) 작성해 보았습니다.

닷넷에서는 포인터가 없어서, 왠지 링크드리스트는 C++로 구현하는 게 맞을 것 같아 굳이 이런 짓을 해 봅니다.

새롭네요.(VS2010에서도 C++ 이 가능하다는 것도 처음 알았어요. ^^)

데이터는 실수(double) 입니다. header, cpp 소스 입니다.


LinkedList.h

#pragma once
class CLinkedList
{
private:
	typedef struct tagNode
	{
		double data;
		struct tagNode *next;
	} NODE;

	NODE *head, *tail;

public:
	CLinkedList(void);
	~CLinkedList(void);

	//노드 추가
	void Add(double n);
	//노드 삭제
	void Remove(double n);
	//모든 노드 삭제
	void RemoveAll();
	//전체 카운트
	int Count();
	//특정 노드 카운트
	int Count(double n);
	//모든 노드 출력
	void PrintAllList();
};


LinkedList.cpp

#include "StdAfx.h"
#include "LinkedList.h"

CLinkedList::CLinkedList(void)
{
	head = NULL;
	tail = NULL;
}

CLinkedList::~CLinkedList(void)
{
	RemoveAll();
}

void CLinkedList::Add(double n)
{
	NODE *temp = (NODE *)malloc(sizeof(NODE));
	temp->data = n;
	temp->next = NULL;

	if ( head == NULL )
	{
		head = temp;
		tail = temp;
	}
	else
	{
		tail->next = temp;
		tail = temp;
	}
}

void CLinkedList::Remove(double n)
{
	if ( head == NULL )
		return;

	NODE *temp = head;
	NODE* node;

	while ( temp != NULL )
	{
		if ( temp->data == n )
		{
			if ( temp == head )
			{
				head = temp->next;
				delete temp;
			}
			else
			{
				node->next = temp->next;
				delete temp;
			}

			Remove(n);
			break;
		}
		node = temp;
		temp = temp->next;
	}
}

void CLinkedList::RemoveAll()
{
	NODE *temp = head;

	while ( temp != NULL )
	{
		NODE *node = temp;
		temp = temp->next;
		free(node);
		node = NULL;
	}

	head = NULL;
	tail = NULL;
}

int CLinkedList::Count()
{
	int count = 0;
	NODE *temp = head;

	while ( temp != NULL )
	{
		count++;
	}

	return count;
}

int CLinkedList::Count(double n)
{
	int count = 0;
	NODE *temp = head;

	while ( temp != NULL )
	{
		if ( temp->data == n )
			count++;
		temp = temp->next;
	}

	return count;
}

void CLinkedList::PrintAllList()
{
	NODE *temp = head;

	printf("head -> ");

	while ( temp != NULL )
	{
		printf("%g -> ", temp->data);
		temp = temp->next;
	}

	printf("tail\n");
}


'Coders' 카테고리의 다른 글

[MSSQL] CHARINDEX를 이용한 문자열 SPLIT  (0) 2013.12.03
[C#] Get 방식으로 웹 페이지 읽기.  (0) 2013.11.19
Syntaxhighlighting 버그 수정.  (0) 2013.11.19