일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 편미분
- 자연어처리
- 단층퍼셉트론
- 인공지능
- 자료구조
- 파이썬 딥러닝
- 단층 퍼셉트론
- 오퍼랜드
- 신경망
- 딥러닝 교차엔트로피
- 엔트로피
- 확률분포
- 파라미터
- DBMS
- 선형 리스트
- 순차 자료구조
- 딥러닝 교차 엔트로피
- 자료구조 알고리즘
- 퍼셉트론
- 리스트
- 딥러닝
- 노드
- 뇌를 자극하는 알고리즘
- 파이썬 날코딩으로 알고 짜는 딥러닝
- 컴퓨터구조
- lost function
- 회귀분석
- 교차 엔트로피
- DB
- 연결 자료구조
- Today
- Total
YZ ZONE
[ 자료구조 및 알고리즘 ] 5.연결 자료구조 -4. 이중 연결 리스트 본문
이중 연결 리스트(doubly linked list)
양쪽 방향으로 순회할 수 있도록 노드를 연결한 리스트
이중 연결 리스트의 노드 구조
• 두 개의 링크 필드와 한 개의 데이터 필드로 구성
• llink(left link) 필드 : 왼쪽노드와 연결하는 포인터
• rlink(right link) 필드 : 오른쪽 노드와 연결하는 포인터
![](https://blog.kakaocdn.net/dn/bkemjy/btr1Jafl2kE/4lKkq0YPSl82IB3qZWcBWk/img.jpg)
• 노드 구조에 대한 구조체 정의
ypedef struct Dnode{
struct Dnode *llink;
char data[5];
struct Dnode *rlink;
} ;
![](https://blog.kakaocdn.net/dn/dyvCTC/btr1EcLzorW/KYPGhdrgHlByipY7lvigJK/img.jpg)
![](https://blog.kakaocdn.net/dn/bQuBK7/btr1yAGb2bN/sazezeSSb2GTEILnKX2lXk/img.jpg)
리스트 week=(월, 수, 금)의 이중 연결 리스트 구성
![](https://blog.kakaocdn.net/dn/bcpJXH/btr1IrVYc2J/KGI3xxEHUEsZy8QPr1Hr8k/img.jpg)
원형 이중 연결 리스트
• 이중 연결 리스트를 원형으로 구성
![](https://blog.kakaocdn.net/dn/dCuXPL/btr1fPLnjg3/t0DHwcrSmsk7BML3M08piK/img.jpg)
![](https://blog.kakaocdn.net/dn/cgtI7o/btr1I9tYSbs/olpNAH3LYXFccX0oUSuDk0/img.jpg)
![](https://blog.kakaocdn.net/dn/bICQpo/btr1fPq3z6W/R79RQCk0VNMjTWVhbdxMQK/img.jpg)
이중 연결 리스트에서의 삽입 연산
이중 연결 리스트에서의 삽입 연산 과정
❶ 삽입할 노드를 가져온다.
❷ 새 노드의 데이터 필드에 값을 저장한다.
❸ 새 노드의 왼쪽 노드(new.llink)의 오른쪽 링크(rlink)를 새 노드의 오른쪽 링크(rlink)에 저장한다.
❹ 그리고 왼쪽 노드의 오른쪽 링크(rlink)에 새 노드의 주소를 저장한다.
❺ 새 노드의 오른쪽 노드(new.rlink)의 왼쪽 링크(llink)를 새 노드의 왼쪽 링크(llink)에 저장한다.
❻ 그리고 오른쪽 노드의 왼쪽 링크(llink)에 새 노드의 주소를 저장한다.
이중 연결 리스트에서의 삽입 알고리즘
![](https://blog.kakaocdn.net/dn/bE1hlF/btr1nxpO78S/Eeq3bgmz3rqD9zUjNGyG30/img.png)
이중 연결 리스트 DL에서 포인터 pre가 가리키는 노드의 다음 노드로 노드 new를 삽입하는 과정
![](https://blog.kakaocdn.net/dn/GTGX0/btr1udR2snX/EyIkSKa4NuoqQfb1AJSzRk/img.jpg)
❶ new.rlink ← pre.rlink ;
• 노드 pre의 rlink를 노드 new의 rlink에 저장하여, 노드 pre의 오른쪽 노 드를 삽입할 노드 new의 오른쪽 노드로 연결
![](https://blog.kakaocdn.net/dn/bY08W2/btr1fNNxkkI/TDBNr7KicaimbLZA5PUOjk/img.jpg)
❷ pre.rlink ← new;
• 새 노드 new의 주소를 노드 pre의 rlink에 저장하여, 노드 new를 노드 pre의 오른쪽 노드로 연결
![](https://blog.kakaocdn.net/dn/B8bsv/btr1EfasTc3/WKKubOHkuuVia1kKTUgIfk/img.jpg)
❸ new.llink ← pre;
• 포인터 pre의 값을 삽입할 노드 new의 llink에 저장하여, 노드 pre를 노 드 new의 왼쪽노드로 연결
![](https://blog.kakaocdn.net/dn/cq079f/btr1p2C5USo/mylPu30cnw8MkNak7XYOnk/img.jpg)
❹ new.rlink.llink ← new;
• 포인터 new의 값을 노드 new의 오른쪽노드(new.rlink)의 llink에 저장하 여, 노드 new의 오른쪽노드의 왼쪽노드로 노드 new를 연결
![](https://blog.kakaocdn.net/dn/tGaUx/btr1pWXlvsT/ZUKyVkN8cBml4OCqTrBCx0/img.jpg)
양방향 기차 사람 나가기
![](https://blog.kakaocdn.net/dn/LMrFQ/btr1EdqaqiU/1TH0CnSJkaCQ0QHBEdw2DK/img.jpg)
![](https://blog.kakaocdn.net/dn/bH5EAS/btr1fOlq1TM/eF4npELE6hQa1xS8l2bKk1/img.jpg)
![](https://blog.kakaocdn.net/dn/rEbTH/btr1lA1zVl4/ru377GV9p9zqwaw0xggEz1/img.jpg)
이중 연결 리스트에서의 삭제 연산
이중 연결 리스트에서의 삭제 연산 과정
❶ 삭제할 노드의 오른쪽 노드의 주소(old.rlink)를 삭제할 노드의 왼쪽 노드(old.llink)의 오른쪽 링크(rlink)에 저장한다.
❷ 삭제할 노드의 왼쪽 노드의 주소(old.llink)를 삭제할 노드의 오른쪽 노드(old.rlink)의 왼쪽 링크(llink)에 저장한다.
❸ 삭제한 노드를 자유공간리스트에 반환한다.
이중 연결 리스트에서의 삭제 알고리즘
![](https://blog.kakaocdn.net/dn/mcVCr/btr1ucZTWRB/OXUFBzfS6D1K9e2zTu1cHK/img.png)
이중 연결 리스트 DL에서 포인터 old가 가리키는 노드를 삭제하는 과정
• 초기 상태
![](https://blog.kakaocdn.net/dn/b9GCws/btr1zmt9SxG/2riCS0dEoR1ZWyPHS6gFOk/img.jpg)
❶ old.llink.rlink ← old.rlink;
• 삭제할 노드 old의 오른쪽노드의 주소를 노드 old의 왼쪽노드의 rlink에 저장하여, 노드 old의 오른쪽노드를 노드 old의 왼쪽노드의 오른쪽노드 로 연결
![](https://blog.kakaocdn.net/dn/eeMqZA/btr1EgHdgX7/CY6TGKj0wSXfn6HKIMdD40/img.jpg)
❷ old.rlink.llink ← old.llink;
• 삭제할 노드 old의 왼쪽노드의 주소를 노드 old의 오른쪽노드의 llink에 저장하여, 노드 old의 왼쪽노드를 노드 old의 오른쪽노드의 왼쪽노드로 연결
![](https://blog.kakaocdn.net/dn/erdvjn/btr1IrIrbiX/9A90xycwSGMYMprye3OeW0/img.jpg)
❸ returnNode(old);
• 삭제된 노드 old는 자유공간리스트에 반환
![](https://blog.kakaocdn.net/dn/cjD21P/btr1pXIGV0J/vKb9SLXR2gNcfstbfBEBnK/img.jpg)
'IT > 자료구조 및 알고리즘' 카테고리의 다른 글
[ 자료구조 및 알고리즘 ] 5.연결 자료구조 -5. 다항식의 연결 자료 구조 표현 (1) | 2023.03.02 |
---|---|
[ 자료구조 및 알고리즘 ] 5.연결 자료구조 - 3. 원형 연결 리스트 (0) | 2023.03.02 |
[ 자료구조 및 알고리즘 ] 5.연결 자료구조 - 2. 단순 연결 리스트 (0) | 2023.02.24 |
[ 자료구조 및 알고리즘 ] 5.연결 자료구조 - 1.연결 자료구조 (0) | 2023.02.24 |
[ 자료구조 및 알고리즘 ] 4. 순차 자료구조 - 4. 행렬의 순차 자료구조 표현 (1) | 2023.02.23 |