#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node* next;
}node;
node *head, *tail;
void add(int item)
{
node* newNode = (node*)calloc(sizeof(node), 1);
newNode->data = item;
if (head->next == NULL) // 첫 노드
head->next = newNode; // head의 next가 newNode 를 가리킴
else
tail->next->next = newNode;
tail->next = newNode;
tail->data = tail->data + 1;
}
void insert(int item, int loc)
{
node* newNode = (node*)calloc(sizeof(node), 1);
node* prevNode;
newNode->data = item;
if (head->next == NULL) // 비어 있으면,
{
head->next = newNode;
tail->next = newNode;
}
else
{
if (loc == 0) // 처음 위치면,
{
newNode->next = head->next;
head->next = newNode;
}
else if (loc == tail->data) // tail 위치면,
{
tail->next->next = newNode;
tail->next = newNode;
}
else // 중간의 위치면,
{
prevNode = head;
while (loc-- && prevNode->next != NULL)
prevNode = prevNode->next;
newNode->next = prevNode->next;
prevNode->next = newNode;
}
}
tail->data = tail->data + 1;
}
void del(int loc)
{
node* delNode;
node* prevNode;
if (head->next == NULL) // 데이터 저장 된 것이 없으면,
return;
if (loc == 0) // 처음의 위치이면,
{
delNode = head->next;
head->next = head->next->next;
delNode->next = NULL;
free(delNode);
if (head->next == NULL)
tail->next = NULL;
}
else
{
prevNode = head;
while (loc-- && prevNode->next != NULL) // loc-- 를 통해 삭제 위치 도달
prevNode = prevNode->next;
delNode = prevNode->next;
prevNode->next = delNode->next; // 앞의 노드가 삭제 노드 뒤를 가리킴
delNode->next = NULL; // NULL로 처리해줌
free(delNode); // 메모리 해제 해줌
if (prevNode->next == NULL) // 삭제 완료 했는데, tail 이라면,
tail->next = prevNode; // tail
}
tail->data = tail->data - 1;
}
void printf()
{
node* printNode = head->next;
int i;
for (i = 0; i < 10; ++i)
{
if (printNode == NULL)
return;
printf("%d ", printNode->data);
printNode = printNode->next;
}
}
int main()
{
freopen("input.txt", "r", stdin);
int T;
int N;
int num;
char sel;
int x, y;
int i, j;
head = (node*)calloc(sizeof(node), 1);
tail = (node*)calloc(sizeof(node), 1);
for (T = 1; T <= 1; ++T)
{
scanf("%d", &N);
for (i = 0; i < N; ++i)
{
scanf("%d", &num);
add(num);
}
scanf("%d", &N);
for (i = 0; i < N; ++i)
{
scanf(" %c", &sel);
if (sel == 'I')
{
scanf("%d %d", &x, &y);
for (j = 0; j < y; ++j)
{
scanf("%d", &num);
insert(num, x + j);
}
}
else if (sel == 'D')
{
scanf("%d %d", &x, &y);
for (j = 0; j < y; ++j)
del(x);
}
else if (sel == 'A') // tail에 붙이는 것이므로 처음 들어오는 입력 데이터와 동일함
{
scanf("%d", &y);
for (j = 0; j < y; ++j)
{
scanf("%d", &num);
add(num);
}
}
}
printf("#%d ", T);
printf();
printf("\n");
while (head->next != NULL)
del(0);
}
free(head);
free(tail);
return 0;
}
댓글