kar7mp5
[자료 구조] Doubly Linked List - 2 본문
728x90
#include <iostream>
using namespace std;
struct node
{
int data;
node *prev;
node *next;
};
class nodeList
{
public:
nodeList();
int size();
node *begin();
void insert(node *pos, int data);
void erase(node *pos);
bool isHeader(node *pos);
bool isTrailer(node *pos);
private:
node *header;
node *trailer;
int n;
};
nodeList::nodeList()
{
header = new node();
trailer = new node();
header->data = 0;
trailer->data = 0;
header->next = trailer;
trailer->prev = header;
header->prev = trailer->next = NULL;
n = 0;
}
int nodeList::size()
{
return n;
}
node *nodeList::begin()
{
return header->next;
}
void nodeList::insert(node *pos, int data)
{
node *newNode = new node();
newNode->data = data;
newNode->prev = pos->prev;
newNode->next = pos;
pos->prev->next = newNode;
pos->prev = newNode;
n++;
}
bool nodeList::isHeader(node *pos)
{
if (pos == header->next)
{
return false;
}
else
{
return true;
}
}
bool nodeList::isTrailer(node *pos)
{
if (pos == trailer)
{
return false;
}
else
{
return true;
}
}
int main()
{
int T;
cin >> T;
while (T--)
{
nodeList *list = new nodeList();
node *p = list->begin();
int currentIndex{0};
int N;
cin >> N;
while (N--)
{
int x;
cin >> x;
list->insert(p, x);
}
p = list->begin();
int M;
cin >> M;
while (M--)
{
int x;
cin >> x;
if (x > 0)
{
while (x--)
{
if (list->isTrailer(p))
{
p = p->next;
currentIndex++;
}
}
int nodeData = p->data;
if(nodeData > 0){
while(nodeData--){
if(list->isTrailer(p)){
p = p->next;
currentIndex++;
}
}
}
else{
while(nodeData++){
if(list->isHeader(p)){
p = p->prev;
currentIndex--;
}
}
}
}
else if (x < 0)
{
while (x++)
{
if (list->isHeader(p))
{
p = p->prev;
currentIndex--;
}
}
int nodeData = p->data;
if(nodeData > 0){
while(nodeData--){
if(list->isTrailer(p)){
p = p->next;
currentIndex++;
}
}
}
else{
while(nodeData++){
if(list->isHeader(p)){
p = p->prev;
currentIndex--;
}
}
}
}
else{
int nodeData = p->data;
if(nodeData > 0){
while(nodeData--){
if(list->isTrailer(p)){
p = p->next;
currentIndex++;
}
}
}
else{
while(nodeData++){
if(list->isHeader(p)){
p = p->prev;
currentIndex--;
}
}
}
}
}
cout<<p->data<<endl;
}
return 0;
}
728x90
'전공 > 자료구조' 카테고리의 다른 글
[자료 구조] C++로 Tree 구현 (0) | 2024.04.12 |
---|---|
[자료 구조] Doubly Linked List로 CPP STL - 3 (0) | 2024.04.05 |
[자료 구조] Doubly Linked List로 Cpp STL List 구현하기 (0) | 2024.04.05 |
[자료 구조] C++ built-in array로 Queue 구현 (0) | 2024.03.29 |