[C++]データ構造-単一リンクリスト
🌼Single Linked List🌼
本当に簡単なSingleLinkedリストを作成
機能実装空()関数を使用して、List内部が空であるかどうかをチェックする . size()関数を使用してリストの数を決定する front()関数を使用してリストのフロントエンドノード をチェック end()関数を使用してリストの末尾ノード をチェックする addFront()関数を使用して、リストの前に新しいノード を追加します. addEnd()関数を使用して、リストの末尾に新しいノード を追加します. showList()関数を使用してリスト をリストする
タイトルファイル
各ノードには名前と番号があります.
ノードクラスにprint()関数が一緒に作成されました.
Listクラスには内蔵関数が多数あるので,それぞれ区別した.
1.変数とクラス作成者
nが0なら1、nが1なら0を返します.
3.front()、end()関数
その他の場合は、一番前のノード(head)を印刷します.
print()関数はノードのname,numを出力する.
end関数はノードが0のときに空(front関数と同じ)を出力します.
その他の場合は、一番後ろのノード(tail)を印刷します.
4.addFront()関数
このように簡単にリストを作成すると、ノードを削除する機能と、最前面と最背面にノードを追加するのではなく、任意のノードの前後に新しいノードを作成する機能を追加する必要があります.
本当に簡単なSingleLinkedリストを作成
機能実装
タイトルファイル
#include <iostream>
#include <vector>
#include <string>
ノードクラスの作成各ノードには名前と番号があります.
ノードクラスにprint()関数が一緒に作成されました.
class Node {
public:
string name;
int num;
Node* next;
Node(string name, int num) { //생성자
this->name = name;
this->num = num;
next = NULL;
}
void print() {
cout << this->name << " " << this->num << endl;
}
};
Listクラスの作成Listクラスには内蔵関数が多数あるので,それぞれ区別した.
1.変数とクラス作成者
Node* head; //처음 노드
Node* tail; //마지막 노드
int n; //노드의 개수
List() { //생성자
head = tail = NULL;
n = 0;
}
2.size()、空()関数int size() {
return n;
}
bool empty() {
return (n == 0);
}
ここで、空()関数はbool関数です.nが0なら1、nが1なら0を返します.
3.front()、end()関数
void front() {
if (empty()) {
cout << "empty" << endl;
return;
}
head->print();
}
void end() {
if (empty()) {
cout << "empty" << endl;
return;
}
tail->print();
}
front関数は、ノードが0の場合に空を出力します.その他の場合は、一番前のノード(head)を印刷します.
print()関数はノードのname,numを出力する.
end関数はノードが0のときに空(front関数と同じ)を出力します.
その他の場合は、一番後ろのノード(tail)を印刷します.
4.addFront()関数
void addFront(string name, int num) {
Node* newnode = new Node(name, num); //새로운 노드 생성
if (head == NULL) {
head = tail = newnode;
}
else { //else 안 적으면 head가 NULL일 때 아래 구문도 생성해버림
Node* temp; //임시 포인터
temp = head; //temp에 기존 head 저장
head = newnode; //head에 newnode를 저장
head->next = temp; //head의 다음 노드를 temp(기존 head)로 지정
}
n++; //노드의 총 개수 +1
}
5.addEnd()関数void addEnd(string name, int num) {
if (head == NULL) { //리스트에 노드가 한 개도 없는 경우
addFront(name, num); //addFront로 노드 생성
}
Node* newnode = new Node(name, num); //새로운 노드 생성
tail->next = newnode; //맨 마지막 노드(tail) 다음에 newnode를 저장
tail = newnode; //맨 마지막 노드(tail)을 newnode로 설정
n++; //노드의 총 개수 +1
}
6.showList()関数void showList() {
if (empty()) { //List가 빈 경우
cout << "empty" << endl;
}
else { //List에 node가 존재하는 경우
Node* temp = head; //head부터 출력하기 위해 temp 생성
for (int i = 0; i < n; i++) {
temp->print(); //노드 출력
temp = temp->next; //출력 후 다음 노드로 변경
}
}
}
main()関数int main() {
List list;
int i;
string name;
int num;
string order;
cin >> i; //몇 번의 명령어를 입력받을 것인가
for (int x = 0; x < i; x++) {
cin >> order;
if (order == "empty") { //리스트가 비어있는지 확인
cout << list.empty() << endl; //비어있으면 1
}
else if (order == "size") { //리스트의 사이즈 확인
cout << list.size() << endl;
}
else if(order == "front") { //리스트의 맨 앞 노드 확인
list.front();
}
else if (order == "showList") { //리스트 전체 나열
list.showList();
}
else if (order == "addFront") { //리스트의 맨 앞에 노드 추가
cout << "이름과 번호를 입력하세요: ";
cin >> name >> num;
list.addFront(name, num);
}
else if (order == "end") { //리스트의 맨 뒤 노드 확인
list.end();
}
else if (order == "addEnd") { //리스트의 맨 뒤에 노드 추가
cout << "이름과 번호를 입력하세요: ";
cin >> name >> num;
list.addEnd(name, num);
}
}
}
_このように簡単にリストを作成すると、ノードを削除する機能と、最前面と最背面にノードを追加するのではなく、任意のノードの前後に新しいノードを作成する機能を追加する必要があります.
Reference
この問題について([C++]データ構造-単一リンクリスト), 我々は、より多くの情報をここで見つけました https://velog.io/@gnoeyhad/C-자료구조-Single-Linked-Listテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol