2.2.4 순환목록

811 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
811
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2.2.4 순환목록

  1. 1. 2.2.4 순환목록
  2. 2. circularly linked list 줄여서 circularlist마지막 노드가 ㅅ가 아니라 처음 노드로 연결.마지막이 마지막이 아니고 처음이 처음이 아니다.어디서 시작하든 다 훑을 수 있다.
  3. 3. 기본연산a) 왼쪽 끝에 Y를 삽입: P <= AVAIL, INFO(P) <- Y,LINK(P)<-LINK(PTR),LINK(PTR)<-pb) 오른쪽 끝에 Y를 삽입: 왼쪽 끝에 Y를 삽인한 후 PTR<-P로 설정c) Y를 왼쪽 끝노드로 설정하고 삭제: P<-LINK(PTR), Y<-INFO(P),LINK(PTR)<-LINK(P),AVAIL<=P빈 목록일 떄 처리를 위한 명령어 추가 (빌때 PTR = ㅅ)(a) INFO(P)<-y다음에 PTR=ㅅ이면 PTR<-LINK(P)<-P 아니면(c) 처음에 만일 PTR=ㅅ이면 UNDERFLOW 끝에PTR=P이면PTR<-ㅅ
  4. 4. (a)와(c) 결합은 스택 (b)와(c)결합은 대기열(큐)전체 삭제가 쉬움만일 PTR!=ㅅ이면 AVAIL<->LINK(PTR)[<-> 는 교환 P<-AVAIL,AVAIL<-LINK(PTR),LINK(PTR)<-P]서로 다른 순환 목록을 합치는 것도 쉬움 - 문자열 연결(concatenation)만일 PTR2 != ㅅ이면 (만일 PTR1!=ㅅ이면 LINK(PTR1) <->LINK(PTR2); PTR1<-PTR2,PTR2<-ㅅ로 설정)하나를 두개로 나누는 것도 쉬움 - 분리(deconcatenation)
  5. 5. 포인터를 하나 더가지면 선형,순환으로 다 사용가능아니면 그냥 대가리 노드를 두던가.->(목록이 비어있을 일이 없음, 끝을 가리키는 포인터가 없으므로연산(b)포기 )
  6. 6. 순환 목록의 이용- 변수 x,y,z의 정수 계수 다항식 산술x4+2x3y+3x2y2+4xy3 곱하기 x2-2xy+y2해서 을 x^6-6xy5+5y6 얻는거다항식이 얼마나 길어질지 모르므로 linked list사용노드는 2워드에 이런 모양 -> 그러니까 x6-6xy5+5y6표현하면
  7. 7. 알고리즘 A 다항식 더하기 + 프로그램ALINK EQU 4:5ABC EQU 0:3ADDD STJ 3F1H ENT3 0,2 ;A1.초기화 LD2 1,3(LINK) ;Q<-LINK(Q1)0H LD1 1,1(LINK) ;P<-LINK(P)SW1 LDA 1,1 ;RA(0:3) <-ABC(P)2H CMPA 1,2(ABC) ;A2. ABC(P):ABC(Q) JE 3F ;같으면 A3 JG 5F ;크면 A5 ENT3 0,2 ;작으면 Q1<-Q LD2 1,3(LINK) ; Q <-LINK(Q1) JMP 2B ;반복3H JAN * ; A3계수들 더하기SW2 LDA 0,1 ; COEF(P)
  8. 8. 알고리즘 AQ<-Q+PA1.초기화A2.같은 지수 찾아서 A3 (지수가 더크면 새로만들기) P보다 Q지수가 작으면 순회, Q지수가 크면 A5A3.계수더하고 A2 (0이면 A4)A4.계수가 0인 항 삭제A5.Q에 새항 삽입
  9. 9. 알고리즘M 다항식 곱하기다항식(Q) + 다항식(M) X 다항식(P)M1. [다음 승수] M <-LINK(M) 만일 ABC(M)<0이면 알고리즘 끝M2. 알고리즘 A 약간 변형해서 수행 ABC(P)대신 ABC(P)+ABC(M) COEF(P) 대신 COEF(P)XCOEF(M) 단계 M1으로 돌아간다.
  10. 10. 3. ptr1 = ptr2 연산(3)그냥 ptr2 <- ㅅ
  11. 11. 5.순환목록 뒤집기Q<-ㅅ, P<-PTRP!=ㅅ인동안 R<-Q,Q<-P,P<-LINK(Q),LINK(Q)<-R (그러고 나면 Q=PTR)
  12. 12. 8. 알고리즘 A에서 Q1이 Q보다 한걸음뒤에서 따르도록 하는게 유용한 이유링크 노드 간직할라고.
  13. 13. 9.P=Q이면 알고리즘 A가 제대로 작동할까?네. 그러나 abc>=0이면서 coef=0인 예외적인 케이스 발생하면 오류그리고 각각 P=M,P=Q,M=Q일 때 알고리즘 M이 제대로 작동할까?p=m 넵p=q 넵 M=t1+t2+...t3이면 p<-px(1+t1)(1+t2)...(1+tk)m=q넵 q<-q+qxp 단 p의 상수항이 -1일때는 잘못계산
  14. 14. 10. 지수가 b-1을 넘지 안흔ㄴ다고 가정.정신이 몽롱..... 모르겠음.
  15. 15. 17. 다항식을 선형목록이 아닌 순환 목록으로 표현하는 것의 장점별로 없음. 지우는거 정도?
  16. 16. 18. 순환목록 링크필드 하나로 양쪽 방향으로 순회 가능하게 하려면?xor로 필드 가지고 있던가 (힌트 참조)포인터 크기 필드 가감해서 순회 하던가.

×