제주 탈출 일지

선형리스트(arrList) 본문

자료구조

선형리스트(arrList)

귀건 2020. 8. 30. 10:57
728x90
반응형

C++의 템플릿을 이용해서 선형 리스트를 나름대로 구현해 보았다.

야매로 짠 코드라 따로 파일을 분할하여 짜지는 않았고, 윤성우 저자의 자료구조를 참고하여 작성했기 때문에 무조건 참조 후 삭제를 해야한다.(왜 이래야 하는지 사실 이해가 안된다..) 혹시혹시 참고한다면 분할하여 삭제부분을 좀 퀄리티 있게 짜보는 것을 추천한다.

 

#include <iostream>
using namespace std;

#define SIZE 100

template
<typename T>
class List
{
private: 
	T arr[SIZE];
	int numOfData;
	int curPosition;
public:
	bool LInsert(const T data) //데이터 저장
	{
		if (numOfData > SIZE)
		{
			cout << "현재 리스트가 꽉 차 있습니다." << endl;
			return false;
		}
		else {
			arr[numOfData] = data;
			cout << numOfData++ << " 위치에 " << data << "가 저장되었습니다." << endl;
			return true;
		}
		
	}

	List() //생성자
	{
		numOfData = 0;
		curPosition = -1;
	}

	bool LFirst(T& LData)
	{
		if (numOfData == 0)
		{
			return false;
		}
		curPosition = 0;
		LData = arr[curPosition];
		return true;
		
	}

	bool LNext(T& LData) //첫번쨰 데이터 이후 데이터 참조
	{
		if (++curPosition >= numOfData - 1)
		{
			return false;
		}

		LData = arr[curPosition];
		return true;


	}

	T LRemove() //데이터 삭제, 두번 연속 호출 불가.
	{
		T rpos = curPosition;

		cout << curPosition << "이 현재 위치 입니다. " << endl;

		int num = numOfData;

		T rdata = arr[curPosition];

		for (int i = rpos; i < num - 1; i++)
		{
			arr[i] = arr[i + 1];
		}

		numOfData--;
		curPosition--;

		return rdata;

	}

	void LPrint()
	{
		for (int i = 0; i < numOfData; i++)
		{
			cout << arr[i] << " ";
		}
		cout << endl;
	}

	T LCount()
	{
		return numOfData;
	}
};

int main()
{
	List<int> ArrList;

	/*List<int>* arrList = new List<int>;*/

	ArrList.LInsert(5);

	ArrList.LInsert(3);

	ArrList.LInsert(4);

	ArrList.LInsert(1);

	ArrList.LInsert(2);

	ArrList.LPrint();

	int a;

	cout << ArrList.LFirst(a) << endl;
	
	/*int a = ArrList.LRemove();*/

	cout << ArrList.LNext(a) << endl;
	
	cout << ArrList.LNext(a) << endl;

	cout << ArrList.LRemove() << endl;

	cout << ArrList.LRemove() << endl;

	ArrList.LPrint();

	return 0;
}

 

 

 

 

 

728x90
반응형

'자료구조' 카테고리의 다른 글

원형 연결리스트(CLinkedList) - C++  (0) 2020.09.02
연결 리스트(LinkedList) - C++  (0) 2020.09.01
Comments