yeahzzz
archive
yeahzzz
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • Language (41)
      • Python (12)
      • JAVA (21)
      • C&C++ (8)
    • Algorithms (25)
      • programmers (9)
      • study log (16)
    • Problems & Solutions (14)
    • Major (29)
      • Data Structure & Algorithm (14)
      • Linux(Ubuntu) (9)
      • Security (2)
      • Linear Algebra (4)
    • FE (44)
      • Web(HTML5, CSS, JS) (5)
      • React & TS (26)
      • 코딩일기 (10)
    • BE (1)
      • Node.js (1)
    • Pytorch (8)
    • Server (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzzz

archive

Major/Data Structure & Algorithm

이중 연결 리스트의 삽입, 삭제 + (다항식 연산 )

2022. 4. 13. 18:55

다항식의 연결 자료구조 표현

 

* 공백 다항식에서의 항 삽입

복잡하게 생각할 필요 없이 새롭게 삽입할 노드 new의 포인터 값을 리스트 포인터에 저장한다. 이와 같은 과정으로 new가 list의 첫번째가 되고, null값을 가진 last에 포인터 new의 값을 저장하면 마지막 노드가 new를 가리키게 된다. 끝!

 

* 다항식에서의 항 삽입 

포인터 new의 값을 노드 last의 링크에 저장한다. 노드 new를 노드 last의 다음 노드로 연결함 

포인터 new의 값을 포인터 last에 저장하고 노드 new를 마지막 노드로 지정하면 됨.

 

*다항식 연산도 가능

addPoly() 메소드 구현 시 차수 비교를 기준으로 케이스 나누기.

순회용 참조변수인 p와 q를 다음으로 이동시키면서 결과 다항식 C에 appendTerm 메소드를 사용하여 추가.

주의 해야할 점. addPoly 메소드에서 appendTerm 사용할 때 클래스가 다르기 때문에 객체 생성해주고 사용하기. 

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package doublyLinkedList;
 
public class LinkedPolyAdd {
 
    public static void main(String[] args) {
        PolyList A = new PolyList(); 
        A.appendTerm(4, 3);
        A.appendTerm(3, 2);
        A.appendTerm(5, 1);
        
        System.out.println("Polynomial A 출력하기");
        A.printPoly();
        
        PolyList B = new PolyList(); 
        B.appendTerm(3, 4);
        B.appendTerm(1, 3);
        B.appendTerm(2, 1);
        B.appendTerm(1, 0);
 
        System.out.println("Polynomial B 출력하기");
        B.printPoly();
        
        OperateLinkedPoly optPoly = new OperateLinkedPoly();
        PolyList C = optPoly.addPoly(A, B); 
        
        System.out.println("Polynomial C 출력하기");
        C.printPoly();
    }
}
 
class OperateLinkedPoly {
    
    public PolyList addPoly(PolyList A, PolyList B) {
        PolyNode p = A.getHead();
        PolyNode q = B.getHead();
        PolyList C = new PolyList(); //결과를 저장하는 새로운 다항식 C
        float sum = 0;
        while(p != null && q!=null) {
            //1. 차수가 같을 때 (expo = 차수)
            if(p.getExpo() == q.getExpo()) {
                sum = p.getCoef() + q.getCoef(); //계수끼리 더한다. 
                if(sum != 0) {
                    C.appendTerm( sum, p.getExpo());
                    p = p.link;
                    q = q.link;
                }
            }
            else if(p.getExpo() < q.getExpo()) {
                C.appendTerm(q.getCoef(), q.getExpo());
                q = q.link;
            }
            else {
                C.appendTerm(p.getCoef(), p.getExpo());
                p = p.link;
            }
         }
        while(p != null) {
            C.appendTerm(p.getCoef(), p.getExpo());
            p = p.link;
        }
        while(q != null) {
            C.appendTerm(q.getCoef(), q.getExpo());
            q = q.link;
        }
        
        return C;
    }
 
}
 
class PolyList {
    private PolyNode head;
    private PolyNode last;
    public PolyList() {
        this.head = null;
        this.last = null;
    }
    public PolyNode getHead(){
        return  this.head;
    }
    public void setHead(PolyNode head) {
        this.head = head;
    }
    public void appendTerm(float coef, int expo) {
        PolyNode newNode = new PolyNode();
        newNode.setCoef(coef);
        newNode.setExpo(expo);
        newNode.setLink(null);
        if (this.head == null) {
            newNode = head;
            newNode = last;
        }
        else {
            newNode = last.link;
            newNode = last;
        }
    }
    
    public void printPoly() {
        PolyNode temp = this.head;
        System.out.printf("PL = ");
        while (temp != null) {
            System.out.printf("%2.0fX^%d ", temp.getCoef(), temp.getExpo());
            temp = temp.getLink();
            if (temp != null) System.out.printf("+ ");
        }
        System.out.printf("\n\n");
    }
}
 
class PolyNode {
    private float coef; 
    int expo; 
    PolyNode link;     
    public PolyNode() {
        this.coef = 0;
        this.expo = 0;
        this.link = null;
    }
    public PolyNode(float coef, int expo) {
        this.coef = coef;
        this.expo = expo;
        this.link = null;
    }
    public float getCoef() {
        return this.coef;
    }
    public void setCoef(float coef) {
        this.coef = coef;
    }
    public int getExpo() {
        return this.expo;
    }
    public void setExpo(int expo) {
        this.expo = expo;
    }
    public PolyNode getLink() {
        return this.link;
    }
    public void setLink(PolyNode link) {
        this.link = link;
    }
}
 
 
 
 
 
Colored by Color Scripter
cs

'Major > Data Structure & Algorithm' 카테고리의 다른 글

review  (0) 2022.04.16
원형 연결 리스트  (0) 2022.04.16
연결리스트 노드 개수 카운팅,특정 노드 순서 바꾸기,첫번째 노드 삭제하기 ...  (0) 2022.04.03
[JAVA] 연결리스트, 노드, 삽입 및 삭제  (0) 2022.04.03
[python+]연결리스트,노드,삽입,삭제  (0) 2022.04.02
    'Major/Data Structure & Algorithm' 카테고리의 다른 글
    • review
    • 원형 연결 리스트
    • 연결리스트 노드 개수 카운팅,특정 노드 순서 바꾸기,첫번째 노드 삭제하기 ...
    • [JAVA] 연결리스트, 노드, 삽입 및 삭제
    yeahzzz
    yeahzzz

    티스토리툴바