[ArrayList.h]
/*
* 선형 자료구조 - C++ 기반으로 다시 작성해보기
* 작성자: Sevenshards
* 작성 일자: 2023.11.23
* 자료구조 - 배열 기반 리스트
* 파일명: ArrayList.h
*/
#ifndef __ARRAY_LIST_H__
#define __ARRAY_LIST_H__
#define LIST_LEN 10
typedef int Data; // 편의상 int형 data를 Data로. 다른 자료형을 넣어도 상관 없다.
class ArrayList
{
private:
Data* arr; // 데이터가 담길 배열
int cur_idx; // 현재 가리키는 인덱스
int numOfData; // 배열에 담긴 데이터의 갯수
public:
// C를 기준으로 ListInit(), LInsert(), LFirst(), LNext(), LRemove(), LCount()가 필요.
// C에서의 ListInit()
ArrayList();
// 동적 할당 방식을 사용할 것이므로 소멸자 선언
~ArrayList();
// C에서의 LInsert()
void LInsert(Data data);
// C에서의 LFirst()
bool LFirst(Data& refdata);
// C에서의 LNext()
bool LNext(Data& refdata);
// C에서의 LRemove()
Data LRemove();
// C에서의 LCount()
int LCount() const;
};
#endif
[ArrayList.cpp]
/*
* 선형 자료구조 - C++로 다시 작성해보기
* 작성자: Sevenshards
* 작성 일자: 2023.11.23
* 자료구조 - 배열 기반 리스트
* 파일명: ArrayList.cpp
*/
#include <iostream>
#include "ArrayList.h"
using std::cout;
// C에서의 ListInit()
ArrayList::ArrayList() : cur_idx(-1), numOfData(0)
{
this->arr = new Data[LIST_LEN];
}
// 동적 할당 방식을 사용할 것이므로 소멸자 선언
ArrayList::~ArrayList()
{
delete[] this->arr;
}
// C에서의 LInsert()
void ArrayList::LInsert(Data data)
{
if (this->cur_idx >= LIST_LEN - 1) // 리스트가 꽉 찬 상태라면
{
cout << "ArrayList Fulled\n";
return;
}
this->cur_idx++;
this->arr[this->cur_idx] = data;
this->numOfData++;
}
// C에서의 LFirst()
bool ArrayList::LFirst(Data& refdata)
{
if (this->cur_idx == -1) // 리스트가 비어있다면
return false;
// 그게 아닐 경우에는
refdata = this->arr[0];
this->cur_idx =0;
return true;
}
// C에서의 LNext()
bool ArrayList::LNext(Data& refdata)
{
if (this->cur_idx >= this->numOfData -1) // 리스트의 전체 데이터 개수를 넘어선 인덱스면
return false;
// 그게 아닐 경우에는
(this->cur_idx++);
refdata = this->arr[this->cur_idx];
return true;
}
// C에서의 LRemove()
Data ArrayList::LRemove()
{
int rData = this->arr[this->cur_idx];
for (int i = this->cur_idx; i < this->numOfData; i++)
this->arr[i] = this->arr[i + 1];
(this->cur_idx)--;
(this->numOfData)--;
return rData;
}
// C에서의 LCount()
int ArrayList::LCount() const
{
return this->numOfData;
}
[ArrayListMain.cpp]
/*
* 선형 자료구조 - C++로 다시 작성해보기
* 작성자: Sevenshards
* 작성 일자: 2023.11.23
* 자료구조 - 배열 기반 리스트
* 파일명: ArrayListMain.cpp
*/
#include <iostream>
#include "ArrayList.h"
using std::cout;
int main()
{
ArrayList arraylist;
Data data;
// 리스트에 0부터 9까지 채워넣음
cout << "리스트에 값을 채워넣습니다.\n";
for (int i = 0; i < LIST_LEN; i++)
{
arraylist.LInsert(i);
cout << "LInsert(" << i << ")\n";
}
// 데이터 개수 확인
cout << "현재 리스트의 데이터 갯수 :" << arraylist.LCount() << "\n\n";
// 리스트 전체 조회
cout << "리스트의 값을 조회합니다.\n";
if (arraylist.LFirst(data))
{
cout << data << '\n';
while(arraylist.LNext(data))
cout << data << '\n';
}
cout << "\n\n";
// 리스트에서 짝수만 삭제
cout << "리스트 내의 짝수 값을 삭제합니다.\n";
if (arraylist.LFirst(data))
{
if (data % 2 == 0)
cout << arraylist.LRemove() << "를 삭제합니다.\n";
while (arraylist.LNext(data))
if (data % 2 == 0)
cout << arraylist.LRemove() << "를 삭제합니다.\n";
}
// 리스트 전체 조회
cout << "리스트의 값을 조회합니다.\n";
if (arraylist.LFirst(data))
{
cout << data << '\n';
while (arraylist.LNext(data))
cout << data << '\n';
}
// 데이터 개수 확인
cout << "현재 리스트의 데이터 갯수 :" << arraylist.LCount() << "\n\n";
return 0;
}
기존에 C에서 작성했던 것을 기반으로 배열 기반 리스트를 C++로 다시 구현해봤다.
C로만 구현을 해보고 C++로 바꿔보려고 하니까 아직은 어색해서 그런지 시간이 좀 걸렸다.
우선은 선형 자료구조 부분까지는 직접 구현하면서 C++에 대해 어색한 부분들을 하나씩 해결해야겠다.
많이 미숙한만큼 혹시 코드를 보고 미흡한 부분이 있다 싶으면 가감없이 조언해주시길 바랍니다.