링크드 리스트 삽입함수에 관한 질문!
라이브라
링크드 리스트의 정렬과 삽입함수이런식으로 프로그램을 짤때 삽입함수를 출력하려면 어떻게 해야하나요질문 내용 :
#include stdio.h
#include stdlib.h
typedef int element;
typedef struct listnode {
element data;
struct listnode *link;
} listnode;
// phead: 리스트의 헤드 포인터의 포인터
// p : 선행 노드
// new_node : 삽입될 노드
void insert_node(listnode **phead, listnode *p,
listnode *new_node)
{
if( *phead == null ){// 공백리스트인 경우
new_node-link = null;
*phead = new_node;
}
else if( p == null ){ // p가 null이면 첫번째 노드로 삽입
new_node-link = *phead;
*phead = new_node;
}
else { // p 다음에 삽입
new_node-link = p-link;
p-link = new_node;
}
}
// phead : 헤드 포인터에 대한 포인터
// p: 삭제될 노드의 선행 노드
// removed: 삭제될 노드
void remove_node(listnode **phead, listnode *p, listnode *removed)
{
if( p == null )
*phead = (*phead)-link;
else
p-link = removed-link;
free(removed);
}
void display(listnode *head)
{
listnode *p=head;
while( p != null ){
printf(%d-, p-data);
p = p-link;
}
printf(\n);
}
void display_recur(listnode *head)
{
listnode *p=head;
if( p != null ){
printf(%d-, p-data);
display_recur(p-link);
}
}
listnode *search(listnode *head, int x)
{
listnode *p;
p = head;
while( p != null ){
if( p-data == x ) return p; // 탐색 성공
p = p-link;
}
return p; // 탐색 실패일 경우 null 반환
}
// 으로 변경
listnode *concat(listnode *head1, listnode *head2)
{
listnode *p;
if( head1 == null ) return head2;
else if( head2 == null ) return head1;
else {
p = head1;
while( p-link != null )
p = p-link;
p-link = head2;
return head1;
}
}
// 로 변환
listnode *reverse(listnode *head)
{
// 순회 포인터로 p, q, r을 사용
listnode *p, *q, *r;
p = head; // p는 역순으로 만들 리스트
q = null; // q는 역순으로 만들 노드
while (p != null){
r = q; // r은 역순으로 된 리스트. r은 q, q는 p를 차례로 따라간다.
q = p;
p = p-link;
q-link =r; // q의 링크 방향을 바꾼다.
}
return q; // q는 역순으로 된 리스트의 헤드 포인터
}
// 노드를 동적으로 생성하는 프로그램
listnode *create_node(element data, listnode *link)
{
listnode *new_node;
new_node = (listnode *)malloc(sizeof(listnode));
if( new_node == null ) {
fprintf(stderr, 메모리 할당 에러\n);
exit(1);
}
new_node-data = data;
new_node-link = link;
return(new_node);
}
// 테스트 프로그램
main()
{
listnode *list1=null, *list2=null;
listnode *p;
// list1 = 30-20-10
insert_node(&list1, null, create_node(10, null));
insert_node(&list1, null, create_node(20, null));
insert_node(&list1, null, create_node(30, null));
display(list1);
// list1 = 20-10
remove_node(&list1, null, list1);
display(list1);
// list2 = 80-70-60
insert_node(&list2, null, create_node(60, null));
insert_node(&list2, null, create_node(70, null));
insert_node(&list2, null, create_node(80, null));
display(list2);
// list1 = list1 + list2
list1 = concat(list1, list2);
display(list1);
// list1을 역st1을 역순으로
list1 = reverse(list1);
display(list1);
// list1에서 20 탐색
p = search(list1, 20);
printf(탐색성공: %d\n, p-data);
}
이런식의 소스가 있는데 리스트에 중간에 삽입을 하는 함수를 집어넣고 싶은데 어떻게 해야하나요 ?
-
후회중
insert_node(리스트의 헤더 , 삽입할 위치 앞에노드의 링크값 , create_node(값, 다음노드의 링크값));
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
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 |
2697432 | 서버 만드는 함수에서 궁금한게있어요~ | 파랑 | 2025-06-07 |
2697401 | 열혈강의 문제오류 (1) | 꿈 | 2025-06-07 |
2697374 | 기초적인 C언어 프로그래밍 입니다. | 얼 | 2025-06-07 |
2697341 | 좌우대칭 문제인데 Q가 입력되면 종료가 되야하는데 되지않습니다 | 무지개 | 2025-06-07 |
2697314 | fprintf와 fscanf 로 파일 입출력 할떄 | 밝음이 | 2025-06-06 |
2697293 | 툴 소스 뽑아내는법 | 도움 | 2025-06-06 |
2697264 | 소소한거 두어가지 질문할께요~ (8) | 별솔 | 2025-06-06 |
2697235 | scanf로 인풋 받을 때?! | 보담 | 2025-06-06 |
2697207 | 열혈강의 연습문제 질문이요~ (2) | 맥적다 | 2025-06-05 |