공부하시는대에 도움이 됐으면 좋겠습니다.
답안코드 확인해주세요!
더보기
#include <stdio.h>
#include <malloc.h>
typedef char element; // 연결 큐 원소(element)의 자료형을 char로 정의
typedef struct QNode { // 연결 큐의 노드를 구조체로 정의
element data;
struct QNode *link;
} QNode;
typedef struct { // 연결 큐에서 사용하는 포인터 front와 rear를 구조체로 정의
QNode *front, *rear;
} LQueueType;
// 공백 연결 큐를 생성하는 연산
LQueueType *createLinkedQueue() {
LQueueType *LQ;
LQ = (LQueueType *)malloc(sizeof(LQueueType));
LQ->front = NULL;
LQ->rear = NULL;
return LQ;
}
// 연결 큐가 공백 상태인지 검사하는 연산
int isEmpty(LQueueType *LQ) {
if (LQ->front == NULL) {
printf(" Linked Queue is empty! ");
return 1;
}
else return 0;
}
// 연결 큐의 rear에 원소를 삽입하는 연산
void enQueue(LQueueType *LQ, element item) {
QNode *newNode = (QNode *)malloc(sizeof(QNode));
newNode->data = item;
newNode->link = NULL;
if (LQ->front == NULL) { // 현재 연결 큐가 공백 상태인 경우
LQ->front = newNode;
LQ->rear = newNode;
}
else { // 현재 연결 큐가 공백 상태가 아닌 경우
LQ->rear->link = newNode;
LQ->rear = newNode;
}
}
// 연결 큐에서 원소를 삭제하고 반환하는 연산
element deQueue(LQueueType *LQ) {
QNode *old = LQ->front;
element item;
if (isEmpty(LQ)) return 0;
else {
item = old->data;
LQ->front = LQ->front->link;
if (LQ->front == NULL)
LQ->rear = NULL;
free(old);
return item;
}
}
// 연결 큐에서 원소를 검색하는 연산
element peek(LQueueType *LQ) {
element item;
if (isEmpty(LQ)) return 0;
else {
item = LQ->front->data;
return item;
}
}
// 연결 큐의 원소를 출력하는 연산
void printLQ(LQueueType *LQ) {
QNode *temp = LQ->front;
printf(" Linked Queue : [");
while (temp) {
printf("%3c", temp->data);
temp = temp->link;
}
printf(" ] ");
}
void main(void) {
LQueueType *LQ = createLinkedQueue(); // 연결 큐 생성
element data;
printf("\n ***** 연결 큐 연산 ***** \n");
printf("\n 삽입 A>>"); enQueue(LQ, 'A'); printLQ(LQ);
printf("\n 삽입 B>>"); enQueue(LQ, 'B'); printLQ(LQ);
printf("\n 삽입 C>>"); enQueue(LQ, 'C'); printLQ(LQ);
data = peek(LQ); printf(" peek item : %c \n", data);
printf("\n 삭제 >>"); data = deQueue(LQ); printLQ(LQ);
printf("\t삭제 데이터: %c", data);
printf("\n 삭제 >>"); data = deQueue(LQ); printLQ(LQ);
printf("\t삭제 데이터: %c", data);
printf("\n 삭제 >>"); data = deQueue(LQ); printLQ(LQ);
printf("\t\t삭제 데이터: %c", data);
printf("\n 삽입 D>>"); enQueue(LQ, 'D'); printLQ(LQ);
printf("\n 삽입 E>>"); enQueue(LQ, 'E'); printLQ(LQ);
getchar();
}
더 많은 C코드가 보고 싶다면?
'C언어' 카테고리의 다른 글
[C언어] 쓰레드 이진트리의 중위 순회를 구현하는 프로그램을 작성하시오 (0) | 2022.12.10 |
---|---|
[C언어] 데크 Dqueue 공백 삽입 삭제 반환 연산하는 프로그램을 작성하시오 (0) | 2022.12.10 |
[C언어] 원형 큐 프로그램을 작성하고 테스트하시오 (0) | 2022.12.10 |
[C언어] Queue 큐 를 생성 공백검사 포화상태 front입력 rear입력을 하는 코드를 작성하고 테스트하시오 (0) | 2022.12.10 |
[C언어] 스택(stack) 에서 후위 표기법 수식을 계산하는 evalPostfix(char *exp) 함수를 작성하고 테스트하는 프로그램을 작성하시오 (0) | 2022.12.10 |
댓글