새로새록

[c++]10.리스트 추가 삭제 출력 본문

소프트웨어융합/경희대 c++ 과제

[c++]10.리스트 추가 삭제 출력

류지나 2020. 7. 18. 00:32

아래 코드를 기반으로 다양한 type(int double, float) 을 사용하여 추가 삭제 출력 기능을 하는
List class 를 구 현하고 이를 사용하는 프로그램을 작성하라

int command()
{
	int num;
	cout << "\n\t---- menu ----" << endl;
	cout << "\t1. 리스트 추가" << endl;
	cout << "\t2. 리스트 삭제" << endl;
	cout << "\t3. 리스트 출력" << endl;
	cout << "\t4. 프로그램 종료" << endl;
	cout << "\n\t입력 --> ";
	cin >> num;
	return num;
}
int main()
{
	CList<type> list; // type형으로 list 선언
	type input; // list에 입력 할 데이터
	int com; // 선택한 기능
	while (1)
	{
		com = command(); // 기능을 선택
		switch (com)
		{
		case 1: // 추가
			cout << "\n추가할 데이터 : ";
			cin >> input;
			list.Add(input);
			break;
		case 2: // 삭제
			cout << "\n삭제할 데이터 : ";
			cin >> input;
			list.Delete(input);
			break;
		case 3: // 출력
			list.Print();
			break;
		case 4: // 프로그램 종료
			cout << "\n\t프로그램을 종료합니다\n";
			return 0;
			break;
		default:
			break;
		}
	}
	return 0;
}
[참조 1]
template <typename T>
class CList
{
public:
	CList();
	~CList();
	bool IsEmpty(); // list가 비어 있으면 1, 아니면 0
	bool IsFull(); // list가 꽉 차 있으면 1, 아니면 0
	void Add(T data); // list에 데이터 추가
	void Delete(T data); // list에 데이터 삭제
	void Print(); // list에 데이터 출력
private:
	T m_Array[5]; // 데이터를 저장할 공간
	int m_Length; // list에 있는 데이터 수
};

 

<기본화면>

 

#include  <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	vector<int> vector1;
	vector<int> vector2;
	srand(time(NULL));
	for (int i = 0; i < 10; i++)
		vector1.push_back(rand() % 11);

	for (int i = 0; i < 10; i++)
		vector2.push_back(rand() % 21);

	vector<int>::iterator iter1_b = begin(vector1);
	vector<int>::iterator iter1_e = end(vector1);
	vector<int>::iterator iter2_b = begin(vector2);
	vector<int>::iterator iter2_e = end(vector2);

	cout << "<vector 1>" << endl;
	int max1 = 0, min1 = 10;
	for (auto iter = iter1_b; iter != iter1_e; iter++) {
		cout << *iter << "  ";
		if (*iter > max1) { max1 = *iter; }
		else if (*iter < min1) { min1 = *iter; }
	}
	cout << endl;
	cout << "<vector 2>" << endl;
	int max2 = 0, min2 = 20;
	for (auto iter = iter2_b; iter != iter2_e; iter++) {
		cout << *iter << "  ";
		if (*iter > max2) { max2 = *iter; }
		else if (*iter < min2) { min2 = *iter; }
	}
	cout << endl << endl;


	cout << "최댓값 = " << max1*max2 << endl;
	cout << "최솟값 = " << min1*min2 << endl;
}
#include <iostream>
using namespace std;

template <typename T >
class CList {
public:
	CList() {
		m_Length = 0;
	}

	bool IsEmpty() {
		if (m_Length == 0)
			return 1;
		else
			return 0;
	}
	bool IsFull() {
		if (m_Length == 5)
			return 1;
		else
			return 0;
	}

	void Add(T data) {
		if (!IsFull()) {
			m_Array[m_Length] = data;
			m_Length++;
		}
		else
			cout << "\n\tList is full.\n";
	}
	void Delete(T data) {
		if (!IsEmpty()){
			for (int i = 0; i < m_Length; i++) {
				if (m_Array[i] == data) {
					m_Length--;
					for (int j = i; j < m_Length;j++)
						m_Array[j] = m_Array[j+1];
					break;
				}
			}
		}
		else
			cout << "\n\tList is empty.\n";
	}
	void Print() {
		if (IsEmpty())
			cout << "\n\tList is empty.\n";
		cout << "※ Current List\n";
		for (int i = 0; i < m_Length; i++)
			cout << m_Array[i]<<"\t";
		cout << endl;
	}
private:
	T m_Array[5];
	int m_Length;
};

int command(){
	int num;

	cout << "\n\t---- menu ----" << endl;
	cout << "\t1. 리스트 추가" << endl;
	cout << "\t2. 리스트 삭제" << endl;
	cout << "\t3. 리스트 출력" << endl;
	cout << "\t4. 프로그램 종료" << endl;
	cout << "\n\t입력 --> ";
	cin >> num;
	return num;
}

int main() {
	CList<int> list;
	int input;
	int com;

	while (1) {
		com = command();

		switch (com)
		{
		case 1:
			cout << "\n추가할 데이터 : ";
			cin >> input;
			list.Add(input);
			break;
		case 2:
			cout << "\n삭제할 데이터 : ";
			cin >> input;
			list.Delete(input);
			break;
		case 3:
			list.Print();
			break;
		case 4:
			cout << "\n\t프로그램을 종료합니다\n";
			return 0;
			break;
		default: 
			break;

		}
	}
}

 

 

 

 

추가문제.

lsit 오름차순 정렬

 

#include <iostream>
using namespace std;

template <typename T >
class CList {
public:
	CList() {
		m_Length = 0;
	}
	~CList() {}

	bool IsEmpty() {
		if (m_Length == 0)
			return 1;
		else
			return 0;
	}
	bool IsFull() {
		if (m_Length == 5)
			return 1;
		else
			return 0;
	}

	void Add(T data) {
		if (!IsFull()) {
			for (int i = 0; i < m_Length; i++) {
				if (m_Array[i] == data) {
					cout << "\n\t중복된 데이터가 존재\n";
					return;
				}
			}
			m_Array[m_Length] = data;
			m_Length++;

			for (int i = 0; i < m_Length-1; i++) {
				for (int j = 0; j < m_Length-1; j++) {
					if (m_Array[j] > m_Array[j + 1]) {
						T temp = m_Array[j];
						m_Array[j] = m_Array[j + 1];
						m_Array[j + 1] = temp;
					}
				}
			}
		}
		else
			cout << "\n\tList is full.\n";
	}

	void Delete(T data) {
		if (!IsEmpty()) {
			for (int i = 0; i < m_Length; i++) {
				if (m_Array[i] == data) {
					m_Length--;
					for (int j = i; j < m_Length; j++)
						m_Array[j] = m_Array[j + 1];
					break;
				}
			}
		}
		else
			cout << "\n\tList is empty.\n";
	}

	void Print() {
		if (IsEmpty())
			cout << "\n\tList is empty.\n";
		cout << "※ Current List\n";
		for (int i = 0; i < m_Length; i++)
			cout << m_Array[i] << "\t";
		cout << endl;
	}

private:
	T m_Array[5];
	int m_Length;
};

int command() {
	int num;

	cout << "\n\t---- menu ----" << endl;
	cout << "\t1. 리스트 추가" << endl;
	cout << "\t2. 리스트 삭제" << endl;
	cout << "\t3. 리스트 출력" << endl;
	cout << "\t4. 프로그램 종료" << endl;
	cout << "\n\t입력 --> ";
	cin >> num;
	return num;
}

int main() {
	CList<int> list;
	int input;
	int com;

	while (1) {
		com = command();

		switch (com)
		{
		case 1:
			cout << "\n추가할 데이터 : ";
			cin >> input;
			list.Add(input);
			break;
		case 2:
			cout << "\n삭제할 데이터 : ";
			cin >> input;
			list.Delete(input);
			break;
		case 3:
			list.Print();
			break;
		case 4:
			cout << "\n\t프로그램을 종료합니다\n";
			return 0;
			break;
		default:
			break;

		}
	}
}

'소프트웨어융합 > 경희대 c++ 과제' 카테고리의 다른 글

[c++]11. 홀수와 n*n 마방진  (0) 2020.07.18
[c++]11.오름차순 정렬 함수  (0) 2020.07.18
[c++]10. 두 벡터의 곱 max min  (0) 2020.07.18
[c++]9. stack class  (0) 2020.07.17
[c++]9. 숫자 야구  (0) 2020.07.17