게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금] Doubly Linked List 구현 질문입니다 ㅠㅠ
게시물ID : programmer_22904짧은주소 복사하기
작성자 : 안녕하세
추천 : 0
조회수 : 1098회
댓글수 : 1개
등록시간 : 2019/05/11 21:35:33
옵션
  • 본인삭제금지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef __DNode_H__
#define __DNode_H__
 
#include <iostream>
#include <string>
using namespace std;
 
typedef string Elem;
class DNode {
private:
    Elem elem;
    DNode* prev;
    DNode* next;
    friend class DLinkedList;
};
 
#endif
 
 
 
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "DNode.h"
 
class DLinkedList {
public:
    DLinkedList();
    ~DLinkedList();
    bool empty() const;
    const Elem& front() const;
    const Elem& back() const;
    void addFront(const Elem& e);
    void addBack(const Elem& e);
    void removeFront();
    void removeBack();
private:
    DNode* header;
    DNode* trailer;
protected:
    void add(DNode* v, const Elem& e);
    void remove(DNode* v);
};
 
 
cs
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "DLinkedList.h"
 
DLinkedList::DLinkedList() {
    header = new DNode;
    trailer = new DNode;
    header->next = trailer;
    trailer->prev = header;
}
 
DLinkedList::~DLinkedList() {
    while (!empty()) removeFront();
    delete header;
    delete trailer;
}
 
bool DLinkedList::empty() const {
    return header->next == trailer; 
}
 
const Elem&    DLinkedList::front() const {
    return header->next->elem; 
}
 
const Elem& DLinkedList::back() const {
    return trailer->prev->elem;
}
 
void DLinkedList::add(DNode* v, const Elem& e) {
    DNode* u = new DNode; u->elem = e;
    u->next = v;
    u->prev = v->prev;
    v->prev->next = v->prev = u;
}
 
void DLinkedList::addFront(const Elem& e) {
    add(header->next, e);
}
 
void DLinkedList::addBack(const Elem& e) {
    add(trailer, e);
}
 
void DLinkedList::remove(DNode* v) {
    DNode* u = v->prev;
    DNode* w = v->next;
    u->next = w;
    w->prev = u;
    delete v;
}
 
void DLinkedList::removeFront() {
    remove(header->next);
}
 
void DLinkedList::removeBack() {
    remove(trailer->prev);
}
 
cs

위에서 부터 DNode.h DLinkedList.h DLinkedList.cpp 파일입니다.

addFront함수는 header 뒤에 새로운 노드를 연결하고 기존의 노드를 뒤로 미루는 함수이고

addBack함수는 trailer 앞에 새로운 노드를 연결합니다.




캡처.PNG

현재 리스트 상황이  b   a    가 되어서 front에 b가 출력되고 back에 a가 출력되어야 하는데 안되네요ㅠㅠㅠ

front()는 deque에 어떤값을 추가해도 출력이 안됩니다.. 왜이럴까요??ㅠㅠ

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호