게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[C++/본삭금] 클래스를 이용한 이중연결리스트 추가 질문드립니다.
게시물ID : programmer_9583짧은주소 복사하기
작성자 : 천이랑
추천 : 0
조회수 : 1655회
댓글수 : 8개
등록시간 : 2015/04/27 23:02:36
옵션
  • 베스트금지
  • 본인삭제금지
LIst관련 오류는 전 게시물에서 해결하였습니다. 도움 주신분께 진심으로 감사의 말씀 올립니다.

다름이 아니라, 이제 insertValue 함수에 관해서 질문드립니다.

자료구조 책을 참고하면서 코딩을 하고있는데, 제가 생각해 본 알고리즘은 insertValue(int value)를 실행하면 value값을 가진 new_node를 new DNode를 통해 생성하고, head가 NULL이라면 head에 new_node를 대입하고, 아니라면 new_node의 prev를 head로, next를 head의 next로 설정, head의 next의 prev를 new_node로 설정하고, head의 next를 new_node로 생성하는 것인데요..

이게 오류를 뿜으면서 컴파일이 제대로 되지를 않네요. 일단 문제의 코드부분입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
    void insertValue(int value)
    {
        Node *new_node = new DNode(NULL, NULL, value);
        if (head == NULL){
            head = new_node;
        }
        else{
            new_node->setPrev(head);
            new_node->setNext(head->getNext());
            head->getNext()->setPrev(new_node);
            head->setNext(new_node);
        }
    }
cs

아 그리고, 코드를 해석해보니 아마 insertValue부분에서 오름차순으로 정리를 해 둬야할것 같은데, 제 판단이 옳은 것인가요? 그렇다면 코드를 어떻게 수정해야 올바르게 작동할 수 있을까요..??

전체 코드 하단에 첨부해 두겠습니다. 도움 부탁드립니다!

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <cstdlib>
#include <cstring>
typedef int element;
 
class Node // 기본으로 주어진 코드. 변경 불가!
{
protected:
    Node *next, *prev;
public:
    virtual Node *getNext() = 0;
    virtual Node *getPrev() = 0;
    virtual void setNext(Node *next) = 0;
    virtual void setPrev(Node *prev) = 0;
    virtual void setVal(int val) = 0;
    virtual int getVal() = 0;
};
 
class DNode : public Node // Node class의 virtual 함수를 구현하기 위한 DNode class 생성.
{
public:
    element data;
public:
    DNode(Node *a, Node *b, element c)
    {
        prev = a;
        next = b;
        data = c;
    }
    Node *getNext(){
        return next;
    }
    Node *getPrev(){
        return prev;
    }
    void setNext(Node *next){
        this->next = next;
    }
    void setPrev(Node *prev){
        this->prev = prev;
    }
    void setVal(int val){
        this->data = val;
    }
    int getVal(){
        return data;
    }
};
 
 
class List // 기본으로 주어진 코드. 변경 불가!
{
protected:
    Node *head, *tail;
public:
    List() :head(NULL), tail(NULL){}
    virtual void insertValue(int value) = 0;
    virtual void printAscent() = 0;
    void printDescent()
    {
        Node *= tail;
        std::cout << "Descent: ";
        while (p != NULL){
            std::cout << p->getVal();
            p = p->getPrev();
            if (p != NULL) std::cout << ", ";
        }
        std::cout << std::endl;
    }
};
 
class DList : public List // List class의 virtual 함수를 구현하기 위해서 List를 상속한 DList class 생성.
{
public:
    void insertValue(int value)
    {
        Node *new_node = new DNode(NULL, NULL, value);
        if (head == NULL){
            head = new_node;
        }
        else{
            new_node->setPrev(head);
            new_node->setNext(head->getNext());
            head->getNext()->setPrev(new_node);
            head->setNext(new_node);
        }
    }
    void printAscent()
    {
        Node *= head;
        std::cout << "Aescent: ";
        while (p != NULL){
            std::cout << p->getVal();
            p = p->getNext();
            if (p != NULL) std::cout << ", ";
        }
        std::cout << std::endl;
    }
};
 
 
void main() // 기본으로 주어진 코드. 변경 불가!
{
    int arr[] = { -2105011 };
    List *list = new DList();
    for (int i = 0; i<5; i++) list->insertValue(arr[i]);
    list->printAscent();
    list->printDescent();
}
cs
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호