June is Combung

Queue 연결리스트 본문

C 자료구조와 알고리즘

Queue 연결리스트

june__Park 2021. 6. 29. 18:57
// QUEUE-연결리스트 (완성)

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

typedef struct node {
	int data;
	struct node* next; 
}NODE;

NODE* head = NULL;
NODE* tail = NULL;

NODE* init(int data){
	NODE* tmp = (NODE*)malloc(sizeof(NODE));
	tmp->data = data;
	tmp->next = NULL;
	return tmp;
}

void print_all(){
	NODE* tmp = head;
	if(head)
		printf("head:%d ",head->data);
	if(tail)
		printf("tail:%d ",tail->data);
	printf("\n");
	while(tmp){
		printf("%d ", tmp->data);
		tmp = tmp->next;
	}
	printf("\n");
}
void peek(){
	printf("%d 가 dequeue 될 차례입니다.\n", head->data);
}
void enqueue(int data){
	// 1. 새 노드 생성 
	NODE* tmp = init(data);

	// 2. 최초 노드니? ==> head 에도 새 노드 주소 저장
	if(!head)
		head = tmp;
	

	// 3. 최초 노드 아니면 
	//    tail 노드의 next에 새 노드 저장 후, tail을 새 노드로 변경
	else 
		tail->next = tmp;
	
	tail = tmp;
}
void dequeue(){
	if(!head){
		printf("QUEUE Underflow! \n");
		return;
	}
	if(head == tail)
		tail = NULL;
	NODE* tmp = head;
	head = head->next;
	free(tmp);
}


void main(){
	int data;
	int select;
	while(1){
		print_all();
		printf("1. enqueue \n2. dequeue \n3. peek \n4. exit \n입력 : ");
		scanf_s("%d", &select);
		switch(select){
		case 1:
			printf("추가할 정수 : "); scanf_s("%d", &data);
			enqueue(data);
			break;
		case 2:
			dequeue();
			break;
		case 3:
			peek();
			break;
		case 4:
			return;
		} // switch 
		system("pause");
		system("cls");
	} // while 
}

Comments