■ 프로그램 소스설명{프 로 그 램 소 스설 명#include #include #include #define SIZE 5int init_Q();int insert_Q(int insert_data);int delete_Q();int print_Q();int isempty();int front_exam();typedef struct Q_node{int data;Q_node *link;}queue_node;queue_node *new_Q, *front, *rear;void main(){init_Q();printf("n");print_Q();int choose;while(1){printf("n 1. 삽입, 2. 삭제, 3. 종료 : ");scanf("%d", &choose);if(choose==1){int insert_data;printf("n Data값을 입력 : ");scanf("%d", &insert_data);insert_Q(insert_data);printf("n");print_Q();front_exam();}: 헤더파일: 연결리스트 노드 5개 선언: Queue 초기화 함수: Queue 데이터 삽입함수: Queue 데이터 삭제함수: Queue 상태 화면출력 함수: Queue 데이터 유·무 확인함수: Queue Front값 확인함수연결리스트 선언: 노드 Data: 노드 Link: new_Q(새로운 노드), front(처음 노드), raer(현재 노드)main 함수: Queue 초기화 함수 호출: 한 줄 바꿈: Queue 상태 화면출력 함수호출: choose 변수선언: 무한반복: 1. 삽입, 2. 삭제, 3. 종료 : 화면 출력: choose 에 입력 값 저장: choose==1 일 때: 저장할 Data 변수선언: Data값을 입력 : 화면 출력: data 에 입력 값 저장: Queue 데이터삽입 함수호출: 한 줄 바꿈: Queue 상태 화면출력 함수호출: Queue Front값 확인 함수호출{else if(choose==2){delete_Q();printf("n");print_Q();front_exam();}else if(choose==3){getch();exit(1);}}getch();}int init_Q(){new_Q=(queue_node*)malloc(sizeof(queue_node));if(new_Q == NULL){printf("Memory Allocation Errorn");exit(1);}new_Q->data = NULL;new_Q->link = NULL;front = rear = new_Q;for(int i=0; idata = NULL;new_Q->link = NULL;rear->link = new_Q;rear = new_Q;}new_Q=(queue_node*)malloc(sizeof(queue_node));new_Q->data = NULL;new_Q->link = front;rear->link = new_Q;return 0;}: choose==2 일 때: Queue 데이터 삭제함수 호출: 한 줄 바꿈: Queue 상태 화면출력 함수호출: Queue Front값 확인 함수호출: choose==3 일 때: 프로그램 종료Queue 초기화 함수(환상형 연결리스트 생성): 새로운 노드 생성: new_Q == NULL일 때 Error 체크: Memory Allocation Error 화면 출력: 프로그램 종료// 첫 번째 노드 생성: 새로운 노드의 data에 NULL 저장: 새로운 노드의 link에 NULL 저장: front = rear = new_Q 초기화: SIZE-2의 개수만큼 생성// 2 ∼ 4번째 노드 생성: 새로운 노드 생성: 새로운 노드의 data에 NULL 저장: 새로운 노드의 link에 NULL 저장: rear 노드의 link에 새로운 노드 저장: 새로운 노드를 rear로 지정// 마지막 노드 생성: 새로운 노드 생성: 새로운 노드의 data에 NULL 저장: 새로운 노드의 link에 첫 노드 저장: rear 노드의 link에 새로운 노드 저장{int insert_Q(int insert_data){rear = front;while(!isempty()){rear=rear->link;if(rear == front){printf("%s", "nQueue Overflown");printf("n모든 데이터를 초기화합니다.n");main();}}rear->data = insert_data;return 0;}int delete_Q(){if(front->data==NULL){printf("%s", "nQueue Emptyn");printf("n모든 데이터를 초기화합니다.n");main();}else{front->data = NULL;front=front->link;if(front->data==NULL)rear = NULL;return(0);}}Queue 데이터 삭제함수: rear를 첫 노드로 지정: rear->data==NULL 일 때까지 반복: 노드 이동: rear = front 일 때: Queue Overflow 화면 출력: 모든 데이터를 초기화합니다. 화면 출력: main 함수호출: 삽입할 Data 저장Queue 데이터 삭제함수: front->data==NULL 일 때: Queue Empty 화면 출력: 모든 데이터를 초기화합니다. 화면 출력: main 함수 호출: front 노드의 data에 NULL값 저장: front 노드를 다음 노드로 이동: front->data==NULL 일 때: rear에 NULL 저장{int print_Q(){rear=front;printf("n ♡♡♡♡ 환상형 연결리스트 Queue ♡♡♡♡n");printf("┌ㅡㅡㅡ┬ㅡㅡㅡ┬ㅡㅡㅡ┬ㅡㅡㅡ┬ ㅡㅡㅡ┐n");while(rear->link!=front){printf("ㅣ %d ", rear->data);rear=rear->link;}printf("ㅣ %d ㅣn", rear->data);printf("└ㅡㅡㅡ┴ㅡㅡㅡ┴ㅡㅡㅡ┴ㅡㅡㅡ┴ ㅡㅡㅡ┘n");printf(" ↑n");printf(" frontn");return 0;}int isempty(){if(rear->data==NULL)return(1);elsereturn(0);}int front_exam(){if(front->data==NULL){printf("%s", "nQueue Emptyn");printf("n모든 데이터를 초기화합니다.n");main();}elseprintf("n front : %dn", front->data);return 0;}Queue 상태 화면출력 함수: rear를 첫 노드로 지정: ♡♡♡♡ 환상형 연결리스트 Queue ♡ ♡♡♡ 화면 출력: ┌ㅡㅡㅡ┬ㅡㅡㅡ┬ㅡㅡㅡ┬ㅡㅡㅡ┬ㅡㅡㅡ ┐ 화면 출력: rear->link != front 때까지 반복: ㅣ %d rear의 data를 화면 출력: 다음 노드로 이동: ㅣ %d ㅣ 화면 출력: └ㅡㅡㅡ┴ㅡㅡㅡ┴ㅡㅡㅡ┴ㅡㅡㅡ┴ㅡㅡㅡ ┘ 화면 출력: ↑ 화면 출력: front 화면 출력Queue 데이터 유·무 확인함수: rear->data==NULL 일 때: 1을 리턴: 이외 일 때: 0을 리턴Queue Front값 확인함수: front->data==NULL 일 때: Queue Empty 화면 출력: 모든 데이터를 초기화합니다. 화면 출력: main 함수 호출: 이외 일 때: front : %d front의 data를 화면 출력■ 실행화면● 초 기{{● 삽 입. Data = 2 삽입(1 선택){{. Data 삽입(Data=20){{. 노드 사이에 Data 삽입(Data=20, Position=5 입력){{. 노드 뒤에 Data 삽입(Data=20, Position=11 입력){{. 노드 뒤에 Data 삽입(Data=20, Position=11 입력){{. 노드 뒤에 Data 삽입(Data=20, Position=11 입력){{● 삭 제. Data 삭제(2 선택){{. Data 삭제(2 선택){{. 노드내의 Data 삭제(Data=5 입력){{. 노드외의 Data 삭제(Data=11 입력){{. 노드내의 Data 삭제(Data=5 입력){{. 노드외의 Data 삭제(Data=11 입력){{● 종 료{{