c++/c++ 자료구조
환형 링크드 리스트
삼전동해커
2021. 2. 23. 23:02
#include<iostream>
#include<string>
using namespace std;
typedef string Elem;
class CNode{
Elem e;
CNode * next;
friend class CLinkedList;
};
class CLinkedList{
CNode * cur;
public:
CLinkedList();
~CLinkedList();
bool empty() const;
void advance();
void add(const Elem& e);
void remove();
const Elem& front() const;
const Elem& back() const;
}
CLinkedList::CLinkedList():cur(NULL){}
CLinkedList::~CLinkedList(){
while(!empty()){
removefront();
}
}
bool CLinkedList::empty() const{
if(cur == NULL)
return 0;
}
const Elem& back() const{
return cur->elem;
}
const Elem& front() const{
return cur->next->elem;
}
CLinkedList::advance(){
cur = cur->next;
}
void CLinkedList::add(const Elem& e){
CNode * NewNode = new CNode;
NewNode->elem = e;
if(cur == NULL){
NewNode->next = NewNode;
cur = NewNode;
}
else{
NewNode->next = cur->next;
cur->next = NewNode;
}
}
void CLinkedList::remove(){
CNode * ret = cur->next;
if(ret == cur)
cur = NULL;
else
cur->next = ret->next;
delete ret;
}
//플레이리스트 만들기
int main(){
CLinkedList list;
list.add("stay live");//stay live(*)
list.add("break up");//stay live(*)->break up
list.add("tiger");//stay live(*)->break up->tiger
list.add("freak");//stay live(*)->break up->tiger->freak
list.advance();//stay live->break up(*)->tiger->freak
list.advance();//stay live->break up->tiger(*)->freak
list.advance();//stay live->break up->tiger->freak(*)
list.remove();//break up->tiger->freak
list.add("disco");
}