Notice
Recent Posts
Recent Comments
Link
헬창 개발자
이중 연결 리스트 구현 : C언어 본문
<설계도>
<코드>
#include <stdio.h>
typedef struct NodeList { //노드 리스트 구조체
struct NodeList* Llink; // L링크: 이전 노드를 가리킴
struct NodeList* Rlink; // R링크: 다음 노드를 가리킴
int data; // 데이터
}Node;
void reverseprint(Node* head) { //노드 역출력 함수
Node* search;// 헤드가 가리키는 링크를 검색노드에 대입 -> 마지막 노드를 가리키는 것이다.
printf("데이터 정상 출력\n");
for (search= head->Llink; search!=head ; search = search->Llink)// Llink를 타면서 정상방향으로 노드를 탐색한다.
{
printf("%d\n", search->data); // 해당 데이터 출력
}
printf("데이터 역순 출력\n");
for (search = head->Rlink; search != head; search = search->Rlink) // Rlink를 타면서 역뱡향으로 노드를 탐색한다.
{
printf("%d\n", search->data); // 해당 데이터 출력
}
}
void Insert(Node** head,int data) { // 노드삽입 함수 머리노드, 선행 노드, 데이터값을 받음
Node* NewNode = (Node*)malloc(sizeof(Node)); // 새로운 노드 동적할당
NewNode->data = data; // NewNode의 데이터 삽입
NewNode->Llink = *head; // NewNode의 Llink에 선행노드 대입
NewNode->Rlink = (*head)->Rlink; // NewNode의 Rlink에 선행노드가 가리키는 노드 대입
(*head)->Rlink->Llink = NewNode; // 선행노드가 가리키는 노드의 Llink는 NewNode를 가리킴
(*head)->Rlink = NewNode; // 선행노드의 Rlink는 NewNode 가리킴
}
int main() {
Node* head = (Node*)malloc(sizeof(Node)); // 머리 노드 생성
head->Rlink = head; // 초기화
head->Llink = head; // 초기화
int num = NULL; // 입력 받을 노드의 개수
printf("노드의 개수입력: ");
scanf_s("%d", &num);
for (int i = 0; i < num; i++) // 노드의 개수 만큼 반복
{
int data = NULL; //입력 받을 데이터 값
printf("노드 #%d 데이터 : ", i + 1);
scanf_s("%d", &data);
Insert(&head,data); // 노드 생성 함수
}
reverseprint(head); // 노드의 데이터값 역출력 함수 호출
}
<결과 화면>
'자료구조' 카테고리의 다른 글
큐를 이용한 피보나치 수열 : C언어 (0) | 2021.07.27 |
---|---|
깊이 우선 탐색(dfs), 넓이 우선 탐색(bfs) 구현 : C언어 (0) | 2021.07.23 |
스택을 이용한 회문 검사 프로그램 : C언어 (0) | 2021.07.22 |
연결 리스트를 이용한 희소 행렬 표현 : C언어 (0) | 2021.07.20 |
단일 연결 리스트 값 탐색하기 : C언어 (0) | 2021.07.19 |
Comments