게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[C++/본삭금] Class를 이용한 이중 연결리스트 관련 질문드립니다!
게시물ID : programmer_9580짧은주소 복사하기
작성자 : 천이랑
추천 : 0
조회수 : 1419회
댓글수 : 3개
등록시간 : 2015/04/27 20:32:10
옵션
  • 베스트금지
  • 본인삭제금지
프게에 질문글을 올리는 것이 매우 결례인줄을 압니다만, 며칠동안의 노력에도 불구하고 원하는 코딩에 접근하지 못하여 실례를 무릅쓰고 질문드립니다.

현재 객체지향언어(C++)와 자료구조를 함께 배우고 있는 학생입니다. 자료구조는 C언어를 이용하여 배우고 있는데요, 객체지향언어(이하 객지)교수님이 최근에 클래스를 사용하여 이중 연결리스트를 구현하고, 이 이중 연결리스트를 사용하여 입력받은 정수의 배열을 오름/내림차순으로 정렬하는 프로그램 코딩을 해오라는 과제를 내주셨습니다.

배우던 C언어로 이중연결리스트를 구현하여 정렬하는건 쉬워보이는데, 막상 C++로 리스트를 구현하려니 머릿속이 복잡하기만 하네요. 교수님이 주신 코드는 Node class와 List class, main함수 세개이며 이 세 코드는 수정을 못하도록 되어있습니다.

Node class에 있는 virtual함수와 List class에 있는 virtual함수를 구현하기 위해서 각각의 클래스를 상속하는 DNode클래스와 DList클래스를 생성하였으며, DNode에서 Node의 변수들을 초기화 하였습니다.

그런데 List class를 생성할 때 자꾸 Node의 클래스가 없다며 에러가 나와서, DNode의 public에 DNode();를 추가하였으나, 확인할 수 없는 외부 참조라는 에러를 발생시키며 컴파일이 잘 되지 않습니다.

List class에 문제가 있다기엔 교수님이 고정(?)시켜주신 코드라서 변경이 불가능하고, 그렇다면 DNode의 생성자를 수정하거나 해야할 것 같은데, 아무리 구글링을 해 봐도 원하는 정보를 찾을 수 없어 프게님들의 도움을 빌리고자 합니다. 제가 작성한 코드는 다음과 같습니다.

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
110
111
112
113
114
115
116
117
#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(); // List의 생성자에서 에러를 발생해 임시적으로 추가.
    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 : public DNode // 기본으로 주어진 코드. 변경 불가! (public DNode만 임의로 추가하였음.)
{
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)
    {
        head = new DNode(NULL, next, NULL);
        tail = new DNode(prev, NULL, NULL);
        head->setNext(tail);
        head->setPrev(head);
        tail->setNext(tail);
        tail->setPrev(head);
        Node *= head->getNext();
        Node *i;
        while (head->getVal() <= value && head->getNext() != tail)
            s = head->getNext();
        i = new DNode(NULL, NULL, NULL);
        s->getPrev()->setNext(i);
        i->setVal(value);
        i->setPrev(s->getPrev());
        s->setPrev(i);
        i->setNext(s);
    }
    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

DNode class와 DList class, 그리고 함수들의 구현은 모두 제가 코딩한 부분입니다. 이 부분에서 오류가 있는 것이 분명한데, 제 능력으로는 뭐가 잘못된건지 판단하기가 쉽지가 않네요. 제가 무언가 빠뜨리거나 실수한 부분이 있으면 아낌없는 조언 부탁드리겠습니다!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호