티스토리 뷰

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");

}

'c++ > c++ 자료구조' 카테고리의 다른 글

이중 링크드 리스트  (0) 2021.02.23
자료구조 배열 사용  (0) 2021.02.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함