#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct node {
int item;
struct node* llink;
struct node* rlink;
};
struct node* avail = NULL;
void addq(struct node*, int);
void deleteq(struct node*);
void listprintf(struct node*);
void erase(struct node*, struct node*);
int main()
{
struct node* head;
int cond, item;
// dummy-node 생성
head = (struct node*)malloc(sizeof(struct node));
if (head == NULL)
{
fprintf(stderr, "The memory is full\n");
exit(1);
}
//Queue 초기화
head->llink = head;
head->rlink = head;
/*head->item = 0;*/
while (1)
{
printf("1:insert\t2:delete\t3:output\t4:exit\n");
scanf("%d", &cond);
if (cond == 1)
{
printf("Input Item\n");
scanf("%d", &item);
addq(head, item);
}
else if (cond == 2)
deleteq(head);
else if (cond == 3)
listprintf(head);
else if (cond == 4)
{
erase(head, avail);
break;
}
else
{
printf("Wrong Input\n");
exit(1);
}
}
return 0;
}
void listprintf(struct node* ptr)
{
struct node* init_position = ptr;
ptr = ptr->rlink;
printf("-----------list---------------\n");
for (; init_position != ptr; ptr = ptr->rlink)
printf("%4d", ptr->item);
printf("\n");
}
void addq(struct node* ptr, int item)
{
//struct node* l_ptr = ptr->llink;
struct node* r_ptr = ptr->rlink;
struct node* temp = NULL;
if (avail)
{
temp = avail;
avail = avail->rlink;
/*temp->llink = NULL;
temp->rlink = NULL;*/
}
else
temp = (struct node*)malloc(sizeof(struct node));
if (temp == NULL)
{
fprintf(stderr, "The memory is full\n");
exit(1);
}
temp->item = item;
temp->llink = ptr;
temp->rlink = ptr->rlink;
ptr->rlink->llink = temp;
ptr->rlink = temp;
/*temp->llink = ptr->llink;
temp->rlink = ptr;
ptr->llink = temp;
if (ptr->rlink == ptr)
ptr->rlink = temp;
else
l_ptr->rlink = temp;*/
}
void deleteq(struct node* ptr)
{
//struct node* delete_node = ptr->rlink;
struct node* delete_node = ptr->llink;
if (ptr->llink == ptr)
{
printf("No Data\n");
return;
}
else
{
delete_node->llink->rlink = delete_node->rlink;
delete_node->rlink->llink = delete_node->llink;
/*ptr->rlink = delete_node->rlink;
if (ptr->llink == delete_node)
ptr->llink = ptr;
else
delete_node->rlink->llink = ptr;*/
}
printf("deleted data: %d\n", delete_node->item);
delete_node->llink = NULL;
delete_node->rlink = NULL;
if (avail)
delete_node->rlink = avail;
else
avail = delete_node;
}
void erase(struct node* head, struct node* avail)
{
printf("실행");
struct node* temp;
while (head != (head->rlink))
deleteq(head);
while (avail != NULL)
{
temp = avail;
avail = avail->rlink;
free(avail);
}
free(head);
}
'Tech Blog > C and C++' 카테고리의 다른 글
C언어 - 이진탐색트리 - 실습 (0) | 2021.06.17 |
---|---|
C언어 - 도트연산자 (.) 과 화살표연산자(->) 차이 (0) | 2021.06.17 |
C언어 - 중위 표기법을 후위 표기법으로 변환 및 계산 (0) | 2021.06.14 |
C언어 - fcmp 실습 (문자 및 숫자 비교) (0) | 2021.06.14 |
C언어 - 구조체 (structure) (0) | 2021.06.13 |