공부하시는대에 도움이 됐으면 좋겠습니다.
답안코드 확인해주세요!
더보기
#include <stdio.h>
#include <malloc.h>
typedef char element; // 데크 원소(element)의 자료형을 char로 정의
typedef struct DQNode { // 이중 연결 리스트 데크의 노드 구조를 구조체로 정의
element data;
struct DQNode *llink;
struct DQNode *rlink;
} DQNode;
typedef struct { // 데크에서 사용하는 포인터 front와 rear를 구조체로 정의
DQNode *front, *rear;
} DQueType;
// 공백 데크를 생성하는 연산
DQueType *createDQue()
{
DQueType *DQ;
DQ = (DQueType *)malloc(sizeof(DQueType));
DQ->front = NULL;
DQ->rear = NULL;
return DQ;
}
// 데크가 공백 상태인지 검사하는 연산
int isEmpty(DQueType *DQ)
{
if (DQ->front == NULL) {
printf("\n Linked Queue is empty! \n");
return 1;
}
else return 0;
}
// 데크의 front 앞으로 원소를 삽입하는 연산
void insertFront(DQueType *DQ, element item)
{
DQNode *newNode = (DQNode *)malloc(sizeof(DQNode));
newNode->data = item;
if (DQ->front == NULL) { // 데크가 공백 상태인 경우
DQ->front = newNode;
DQ->rear = newNode;
newNode->rlink = NULL;
newNode->llink = NULL;
}
else {
DQ->front->llink = newNode;
newNode->rlink = DQ->front;
newNode->llink = NULL;
DQ->front = newNode;
}
}
// 데크의 rear 뒤로 원소를 삽입하는 연산
void insertRear(DQueType *DQ, element item)
{
DQNode *newNode = (DQNode *)malloc(sizeof(DQNode));
newNode->data = item;
if (DQ->rear == NULL) { // 데크가 공백 상태인 경우
DQ->front = newNode;
DQ->rear = newNode;
newNode->rlink = NULL;
newNode->llink = NULL;
}
else {
DQ->rear->rlink = newNode;
newNode->rlink = NULL;
newNode->llink = DQ->rear;
DQ->rear = newNode;
}
}
// 데크의 front 노드를 삭제하고 반환하는 연산
element deleteFront(DQueType *DQ)
{
DQNode *old = DQ->front;
element item;
if (isEmpty(DQ)) return 0;
else {
item = old->data;
if (DQ->front->rlink == NULL) {
DQ->front = NULL;
DQ->rear = NULL;
}
else {
DQ->front = DQ->front->rlink;
DQ->front->llink = NULL;
}
free(old);
return item;
}
}
// 데크의 rear 노드를 삭제하고 반환하는 연산
element deleteRear(DQueType *DQ)
{
DQNode *old = DQ->rear;
element item;
if (isEmpty(DQ)) return 0;
else {
item = old->data;
if (DQ->rear->llink == NULL) {
DQ->front = NULL;
DQ->rear = NULL;
}
else {
DQ->rear = DQ->rear->llink;
DQ->rear->rlink = NULL;
}
free(old);
return item;
}
}
// 데크의 front 노드의 데이터 필드를 반환하는 연산
element peekFront(DQueType *DQ)
{
element item;
if (isEmpty(DQ)) return 0;
else {
item = DQ->front->data;
return item;
}
}
// 데크의 rear 노드의 데이터 필드를 반환하는 연산
element peekRear(DQueType *DQ)
{
element item;
if (isEmpty(DQ)) return 0;
else {
item = DQ->rear->data;
return item;
}
}
// 데크의 front 노드부터 rear 노드까지 출력하는 연산
void printDQ(DQueType *DQ)
{
DQNode *temp = DQ->front;
printf("DeQue : [");
while (temp) {
printf("%3c", temp->data);
temp = temp->rlink;
}
printf(" ] ");
}
void main(void)
{
DQueType *DQ1 = createDQue(); // 데크 생성
element data;
printf("\n ***** 데크 연산 ***** \n");
printf("\n front 삽입 A>> "); insertFront(DQ1, 'A'); printDQ(DQ1);
printf("\n front 삽입 B>> "); insertFront(DQ1, 'B'); printDQ(DQ1);
printf("\n rear 삽입 C>> "); insertRear(DQ1, 'C'); printDQ(DQ1);
printf("\n front 삭제 >> "); data = deleteFront(DQ1); printDQ(DQ1);
printf("\t삭제 데이터: %c", data);
printf("\n rear 삭제 >> "); data = deleteRear(DQ1); printDQ(DQ1);
printf("\t\t삭제 데이터: %c", data);
printf("\n rear 삽입 D>> "); insertRear(DQ1, 'D'); printDQ(DQ1);
printf("\n front 삽입 E>> "); insertFront(DQ1, 'E'); printDQ(DQ1);
printf("\n front 삽입 F>> "); insertFront(DQ1, 'F'); printDQ(DQ1);
data = peekFront(DQ1); printf("\n peek Front item : %c \n", data);
data = peekRear(DQ1); printf(" peek Rear item : %c \n", data);
getchar();
}
더 많은 C코드가 보고 싶다면?
'C언어' 카테고리의 다른 글
[C언어] heap 히프를 생성 삽입 삭제 출력하는 프로그램을 작성하고 테스트 하시오 (0) | 2022.12.10 |
---|---|
[C언어] 쓰레드 이진트리의 중위 순회를 구현하는 프로그램을 작성하시오 (0) | 2022.12.10 |
[C언어] 연결큐 linked queue를 생성 검사 삽입 삭제 검색 하는 프로그램을 작성하는 프로그램을 작성하시오 (0) | 2022.12.10 |
[C언어] 원형 큐 프로그램을 작성하고 테스트하시오 (0) | 2022.12.10 |
[C언어] Queue 큐 를 생성 공백검사 포화상태 front입력 rear입력을 하는 코드를 작성하고 테스트하시오 (0) | 2022.12.10 |
댓글