다중연결리스트(순환 이중 연결리스트)의 탐색과 삭제문제입니다..
보나
질문 제목 : 다중 연결리스트(순환 이중 연결 리스트 탐색과 삭제입니다)질문 요약 :다중연결 리스트는 짰는데 탐색을 어떻게 해야할지 궁금합니다.. 탐색을하고 삭제를 해야하지요..질문 내용 :
일단 다중연결리스트는 완성했습니다..
문제는 여기서 n을 입력받아 그걸 탐색하고 그 노드를 삭제하는 것인데요..
탐색을할려면 제가 생각 해본게. count를 하고 그걸 삭제하는건데..아닌가요?
아니면 탐색함수를 하나 만들어야하나요?
탐색함수를 만들어야한다면 이 소스 수정좀 부탁드립니다..아니면 힌트라도!!!!^^많은 관심 부탁드립니다
#include stdio.h
#include stdlib.h
typedef struct
{
int key;
} element;
typedef struct node *node_pointer;
typedef struct node
{
node_pointer llink;
element item;
node_pointer rlink;
};
void dinsert(node_pointer *node, element item) // node의 오른쪽(rlink)로 삽입.
{
node_pointer newnode;
if((*node) == null)
{
fprintf(stderr, node is empty, error\n);
exit(1);
}
newnode = (node_pointer)malloc(sizeof(struct node));
if(newnode == null)
{
fprintf(stderr, memory error!!!\n);
exit(1);
}
newnode-item = item;
newnode-llink = (*node);
newnode-rlink = (*node)-rlink;
(*node)-rlink-llink = newnode;
(*node)-rlink = newnode;
(*node) = newnode;
}
void ddelete(node_pointer node, node_pointer deleted) // 이중 연결 리스트에서 삭제 (노드, 삭제노드)
{
if(node == deleted)
fprintf(stderr, deletion of head node not permitted.\n);
else
{
deleted-llink-rlink = deleted-rlink;
deleted-rlink-llink = deleted-llink;
free(deleted);
}
}
void print_right(node_pointer node)
{
node_pointer temp = node-rlink;
while(temp != node)
{
printf( [%d] , temp-item);
temp = temp-rlink;
}
printf( - complete !!! [right]\n);
}
void print_left(node_pointer node)
{
node_pointer temp = node-llink;
while(temp != node)
{
printf( [%d] , temp-item);
temp = temp-llink;
}
printf( - complete !!! [left]\n);
}
int count_node(node_pointer node) // 노드 갯수 알아내는 함수
{
node_pointer temp = node-llink;
int cnt = 0;
while(temp != node)
{
cnt++;
temp = temp-llink;
}
return cnt;
}
/* coded by i0nucleus */
void main(void)
{
element item;
node_pointer head, start, del_list;
unsigned int i;
head = (node_pointer)malloc(sizeof(struct node));
if(head == null)
{
fprintf(stderr, cannot create the head list\n);
exit(1);
}
item.key = 0;
head-item = item;
head-llink = head-rlink = head; // head 노드 초기화
start = head;
for(i=1; i=10; i++)
{
item.key = i;
dinsert(&start, item);
}
print_right(head);
print_left(head);
i = count_node(head);
printf( count = %d\n, i);
printf(\n delete [2]\n); // 2번째 노드 삭제
del_list = head-rlink-rlink;
ddelete(head, del_list);
print_right(head);
print_left(head);
i = count_node(head);
printf( count = %d\n\n, i);
printf( delete dll\n);
while(i-- 0) ddelete(head, head-rlink); // 이중 리스트 모두 삭제
print_right(head);
print_left(head);
free(head); // 헤드노드 삭제
return;
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2698184 | 간단한 C언어 인데 .. | 붕붕 | 2025-06-14 |
2698120 | -연산자 가 먼지 좀 알려주세요 (1) | 낮선검객 | 2025-06-14 |
2698091 | 길찾기문제 질문이요! | 노을빛 | 2025-06-13 |
2698060 | while 문에 대한 질문입니다. (9) | 물고기자리 | 2025-06-13 |
2698012 | 2~9가아닌수 | 아놀드 | 2025-06-13 |
2697980 | for에 gets함수를 넣으니까 왜 반복이 안되죠 ㅜ (2) | 펴라 | 2025-06-12 |
2697952 | 2차배열과 함수문의^^; | VanilLa | 2025-06-12 |
2697924 | 다차원 배열 질문있습니다 | 두동 | 2025-06-12 |
2697893 | 정올 :: 기초다지기 a9007 배열7 (문제가 이상함 -_-) | 흰두루 | 2025-06-12 |
2697862 | Unable......... 지정된 파일을 찾을 수 없습니다!! (1) | Creator | 2025-06-11 |
2697761 | 그러니까여제말은... (2) | 새론 | 2025-06-10 |
2697737 | 정올 문제좀 풀어보신분~ | 레오 | 2025-06-10 |
2697709 | rand함수 질문좀요! (6) | 가막새 | 2025-06-10 |
2697683 | C언어 변수뒤 표시가 이해안되는게 있습니다. | 소미 | 2025-06-10 |
2697660 | 껍데기딜 만들고 난후 어느핫키 누르면 코드검색이라도 뜨고 그다음 무반응 해결좀 (2) | 움찬 | 2025-06-09 |
2697634 | c언어로 감성사전 만들기! (1) | 도란도란 | 2025-06-09 |
2697605 | 이 함수좀... | agine | 2025-06-09 |
2697574 | 배열 기본적인질문 (3) | 민트향 | 2025-06-09 |
2697549 | 배열 초기화 (4) | 나리 | 2025-06-08 |
2697465 | 수다님...^^ (2) | 가론 | 2025-06-08 |