본문 바로가기
c & c++/자료구조

연결형 리스트(Linked List)

by 일상코더 2022. 8. 7.

LinkedList.h

LinkedList.cpp

#include "LinkedList.h"
#include <iostream>

//연결형 리스트 초기화 함수 구현
void initList(stLinkedList* pList)
{
	pList->pHeadNode = nullptr;
	pList->count = 0; 

}


//연결형 리스트 데이터 추가 함수 구현
void PushBack(stLinkedList* pList, int intData)
{
	//stNode 포인터 pNode 동적 할당
	stNode* pNode = (stNode*)malloc(sizeof(stNode));

	//pNode의 멤버 iData값은 매개변수 intData;
	pNode->iData = intData;

	//PushBack이기 때문에 pNode 의 다음 노드는 없음으로 null포인터
	pNode->pNextNode = nullptr;

	//데이터가 하나도 없을 경우 
	if (pList->pHeadNode == nullptr)
	{
		pList->pHeadNode = pNode;
	}

	//데이터가 하나 이상일 경우 
	else
	{
		//지역변수 pCurrentFinalNode 생성 -> 반복하면서 pNextNode가 nullptr인 자리를 찾아줌
		stNode* pCurrentFinalNode = pList->pHeadNode;
		
		while (true)
		{
			
			if (pCurrentFinalNode->pNextNode == nullptr)
			{
				//null포인터면 반복문 탈출
				break;
			}
			//nullptr가 아닌경우 변수안에 그다음 자리의 주소를 넣어줌
			pCurrentFinalNode = pCurrentFinalNode->pNextNode;
		}
		
		//null 포인터를 찾았으니 null 포인터 자리에 추가된 데이터의 주소를 넣어줌
		pCurrentFinalNode->pNextNode = pNode;
	}

	//리스트 의 카운트 멤버 증가
	++pList->count;

}

//연결형 리스트 앞쪽으로 데이터 추가 함수 구현
void PushFront(stLinkedList* pList, int intData)
{
	stNode* newNode = (stNode*)malloc(sizeof(stNode));
	newNode->iData = intData;

	//새로 생성한 노드의 다음은 리스트가 가리키고 있는 첫번째 pHeadNode
	newNode->pNextNode = pList->pHeadNode;
	
	//리스트 pHeadNode 포인터를 갱신
	pList->pHeadNode = newNode;

	//데이터 가운트 증가
	++pList->count;
}

//연결형 리스트 힙 메모리 영역 할당 해제 함수 구현
void ReleaseList(stLinkedList* pList)
{
	
	stNode* deletNode = pList->pHeadNode;
	
	//deletNode 가 true일 동안(0이 아닌동안 = nullptr이 아닌동안) 0이면 반복문 탈출
	while (deletNode)
	{
		stNode* pNext = deletNode->pNextNode;
		free(deletNode);
		deletNode = pNext;
	}

}

main.cpp

 

'c & c++ > 자료구조' 카테고리의 다른 글

iterator 연산자 함수 구현  (0) 2022.08.23
vector(가변배열) iterator(반복자) 구현  (0) 2022.08.16
반복자(Iterator)  (0) 2022.08.16
연결형 리스트 구현  (0) 2022.08.12
가변 배열  (0) 2022.08.01

댓글