Linked_Queue 구현

  • 문자들의 Linked Queue 를 테스트하는 프로그램 구현
  • 명령어
    + : AddQ --: DeleteQ S : Show Q : Quit

실행 예

image

자료구조 및 함수 구성

typedef struct queue queue_pointer;
typedef struct queue {
	Element item;
	queue_pointer link;
} queue;
queue_pointer front, rear;
  • Void addq(Element e)
    Results : Queue 에 e 를 삽입

  • Element deleteq()
    Requires : Queue 가 비어 있지 않아야 함
    Results : Queue 에서 원소를 반환

  • Void queue_show()
    Results : Queue 의 내용을 보여줌

  • Boolean is_queue_empty()
    Results : Queue 가 비어있으면 true 반환

Source

  • 실습1.h
#pragma once
#define boolean unsigned char
#define true 1
#define false 0

typedef char Element;
typedef struct queue* queue_pointer;
typedef struct queue {
	Element item;
	queue_pointer link;
}queue;
queue_pointer front, rear;

void addq(Element e);
Element deleteq();
void queue_show();
boolean is_queue_empty();
  • 실습1.cpp
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include"실습1.h"

void addq(Element e) {
	queue_pointer temp = (queue_pointer)malloc(sizeof(queue));
	temp->item = e;
	temp->link = NULL;

	if (is_queue_empty())
		front = rear = temp;
	else {
		rear->link = temp;
		rear = temp;
	}
}
Element deleteq() {
	queue_pointer temp;
	Element item;

	if (is_queue_empty())
		return item;
	item = front->item;
	temp = front;

	front = front->link;
	free(temp);

	return item;
}
void queue_show() {
	queue_pointer head;
	head = front;
	printf("\n");
	while (head != NULL) {
		printf("%c ", head->item);
		head = head->link;
	}
}
boolean is_queue_empty() {
	if (front == NULL)
		return true;
	else
		return false;
}

void main() {
	char c, e;
	front = rear = NULL;
	while (1) {
		printf("\nCommand> ");
		c = getch();
		putch(c);
		c = toupper(c);
		switch (c) {
		case'+':
			e = getch();
			putch(e);
			addq(e);
			break;

		case '-':
			if (is_queue_empty())
				printf("\nQueue is empty!!!\n");
			else {
				e = deleteq();
				printf("\n %c", e);
			}
			break;
		case'S':
			queue_show();
			break;
		case'Q':
			printf("\n");
			exit(1);
		default:
			break;
		}
	}
}