June is Combung
Queue 연결리스트 본문
// 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
}
'C 자료구조와 알고리즘' 카테고리의 다른 글
연습문제1 (0) | 2021.06.29 |
---|---|
연결리스트(중간 노드 삽입 삭제) 이중포인터 버전 (0) | 2021.06.29 |
연결리스트(중간 노드 삽입 삭제) 단일포인터 버전 (0) | 2021.06.29 |
스택과 연결리스트 (0) | 2021.06.29 |
스택과 시간복잡도 (0) | 2021.06.29 |
Comments