|
혼자 데이터구조를 공부하는데 너무 어렵네요.
교재도 잘못 고른듯하고요..(해답이 없어서 초보인 입장으로선 전혀 돌파구가 없네요)
해답까지 전부 있고 설명 좋은 데이터구조 교재를 1권만 추천해주셨으면 합니다.(돈 사정이 여의치 않아서 1권밖에 못 삽니다..오늘 추천해주신 김백일님 책도 검토해보겠습니다.)
아래는 단순연결리스트를 이용해서 d=a+b 를 표현해보려고 한건데요..
에러가 16개나 떠요...
게다가 지금 제가 하려는건 head노드를 가진 환형연결 리스트로 바꿔줘야 하거든요...
coef- exp- link 이런 노드를 이용한거에요.
avail 리스트를 이용해서 만들라고 하는데... 뭐가 뭔지... 머리가 너무 복잡하네요.
6가지가 있는데 그중 우선 1, 2, 3번만 잡아주시면 안 될까요?(바쁘시면 1 번만이라도..)
평생 은혜 안 잊겠습니다.
1) pread
다항식을 읽어서 환형 연결 리스트 표현으로 변환하고 그 다항식의 head노드의 포인터를 반환.
(2) pwrite
일반적인 다항식의 형태로 출력한다.
(3) padd
d = a + b 를 계산한다. a 와 b 를 바꾸지 말것.
(4) psub
d = a - b 를 계산한다. a 와 b 를 바꾸지 말것.
(5) eval
실수형 상수인 x에 대해 다항식의 값을 계산하여 그 결과를 반환한다.
(6) perase
avail 리스트에 환형 연결 리스트로 표현된 다항식을 반환한다.
#include <stdio.h>
void main()
{
typedef struct polyNode *polyPtr;
typedef struct{
int coef;
int exp;
polyPtr link;
}polyNode;
polyPtr d,a,b;
polyPtr padd(polyPtr a, polyPtr b)
{
polyPtr temp, temp1, temp2;
int sum;
temp2 = (polyPtr)malloc(sizeof(polyNode));
if (IS_FULL(temp2)) return;
temp1 = temp2;
while (a && b)
switch (compare(a->exp, b->exp))
{
case -1 : attach(b->coef, b->exp, &temp2);
b = b->link;
break;
case 0 : sum = a->coef + b->coef;
if(sum)
attach(sum, a->exp, &temp2);
a = a->link;
b = b->link;
break;
case 1 : attach(a->coef, a->exp, &temp2);
a = a->link;
}
for (;a;a = a->link) attach(a->coef, a->exp, &temp2);
for (;b;b = b->link) attach(b->coef, b->exp, &temp2);
temp2->link = NULL;
temp = temp1;
temp1 = temp1->link;
free(temp);
return temp1;
}
}
void attach(int coeff, int expo, polyPtr *ptr)
{
polyPtr temp;
temp = (polyPtr)malloc(sizeof(polyNode));
if (IS_FULL(temp)) return;
temp->coef = coeff;
temp->exp = expo;
(*ptr)->link = temp;
*ptr = temp;
}
|