[C++]データ構造-単一リンクリスト


🌼Single Linked List🌼
本当に簡単なSingleLinkedリストを作成
機能実装
  • 空()関数を使用して、List内部が空であるかどうかをチェックする
  • .
  • size()関数を使用してリストの数を決定する
  • front()関数を使用してリストのフロントエンドノード
  • をチェック
  • end()関数を使用してリストの末尾ノード
  • をチェックする
  • addFront()関数を使用して、リストの前に新しいノード
  • を追加します.
  • addEnd()関数を使用して、リストの末尾に新しいノード
  • を追加します.
  • showList()関数を使用してリスト
  • をリストする
    タイトルファイル
    #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);
    		}
    	}
    }
    _
    このように簡単にリストを作成すると、ノードを削除する機能と、最前面と最背面にノードを追加するのではなく、任意のノードの前後に新しいノードを作成する機能を追加する必要があります.