본문 바로가기

공부/자료구조 | 알고리즘

[자료구조] 연결리스트 만들고 출력하기 Linked List

반응형
연결리스트 만들고 출력하기
- 아래 구조체를 사용하여, 정수 10, 20, 30, 40, 50, 60, 70, 80으로 구성된 연결리스트를 만들고
- 시작 
노드의 주소를 헤드 포인터 head에 연결시키시오.

class Node {
    int score;
    Node *link;
};

- 또한 head를 시작으로 연결리스트의 노드들을 따라가면서 각 노드의 값을 출력하시오.
- 10, 20, 30, 40, 50, 60, 70, 80 이 출력되는지 확인하시오.
- 배열은 사용하지 말고, 연결 리스트만 사용하시오.
- 주어진 값 대신 값을 입력 받도록 수정해 보시오.

 

#include <iostream>
using namespace std;

class Node {
public:
	int score; //점수
	Node *link; //다음 노드 주소
};
Node *Head = NULL;

//리스트 마지막에 노드 삽입 방법
void insert_at_rear(Node *new_node) {
	if (Head == NULL) {
		Head = new_node;
	}
	else {
		//마지막 노드를 찾고, 그 노드 뒤에 new_node 연결
		Node *list = Head; //list는 포인터이며 초기값은 head
		while (list->link != NULL) //list의 link값이 null일 경우 끝남 
			list = list->link;
		list->link = new_node;
	}
}

Node *MakeNewNode(int score) { //노드를 하나 동적 할당, 값 초기화
	//	리턴하는 값이 Node에 대한 포인트이므로 "*"MakeNewNode라 함. 
	Node *ptr;
	ptr = new Node();
	ptr->score = score;
	ptr->link = NULL;
	return ptr;
}

void printNodes(Node *head) {
	for (Node *list = head; list != NULL; list = list->link)
		cout << list->score << endl;
}

int main() {
	//	Node *Head = NULL; //전역변수로 이동
	Node *new_node;

	new_node = MakeNewNode(10); //값이 10인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(20); //값이 20인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(30); //값이 30인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(40); //값이 40인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(50); //값이 50인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(60); //값이 60인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(70); //값이 70인 노드 생성
	insert_at_rear(new_node);
	new_node = MakeNewNode(80); //값이 80인 노드 생성
	insert_at_rear(new_node);

	printNodes(Head);
}
반응형