C언어 자료구조 ( 싱글리스트 중간노드 삽입함수 구현이 잘안됩니다)
보슬
질문 제목 : c언어 자료구조 단일링크드리스트 중간 노드 삽입 함수 구현이 잘 안됩니다.
중간삽입 메뉴에 들어가면
몇번째 노드에 넣을껀지 묻게되는데
3 이라고 입력하면
3번째 노드로 이동합니다
3번째 노드에 새로운 노드 생성해서
그 노드에 데이터를 입력받습니다 ( ex : 100)
그리고 이 새로운 노드를 이전노드와 다음노드에 연결하고
전체 출력해보면 추가 가 안됩니다...
ㅠㅠ
밑에 코드 있습니다 한번 봐주세요 ㅠㅠ 주석을 뒤늦게 달아놨는데 ,,,,,,, 급한게 단다고
지적해주시면 감사하겠습니다.
질문 내용 :
노드 생성, 연결
부분출력, 전체 출력은 이상없이 구현이 되었는데
중간삽입 이 잘안됩니다
에러는 안나고요. 실행은되는데
예를 들어
중간삽입 메뉴에 들어가면
몇번째 노드에 넣을껀지 묻게되는데
3 이라고 입력하면
3번째 노드로 이동합니다
3번째 노드에 새로운 노드 생성해서
그 노드에 데이터를 입력받습니다 ( ex : 100)
그리고 이 새로운 노드를 이전노드와 다음노드에 연결하고
전체 출력해보면 추가 가 안됩니다...
ㅠㅠ
밑에 코드 있습니다 한번 봐주세요 ㅠㅠ 주석을 뒤늦게 달아놨는데 ,,,,,,, 급한게 단다고
지적해주시면 감사하겠습니다.
#include stdio.h
#include stdlib.h
typedef int elementtype;
typedef struct node{//노드 구조체 선언 (데이터 필드 , 다음 노드 포인터 필드)
elementtype data;
node * nextnode;
}node;
node* create_node(elementtype a){// 노드 생성 함수 ( 힙영역에 생성만 한 후에 append_node 함수로 노드 연결)
node* newnode = (node*)malloc(sizeof(node));
newnode - data = a;
newnode - nextnode = null;
return newnode;
}
void append_node(node** head, node* newnode)//생성된 노드 를 연결 하는 함수 /
{
if( (*head) == null)// 매개 변수를 2개 가지는데 메인함수 내에 변수 node* list, 와 node* newnode 가 있음
{// node* list 는 헤드가 됨 . 예를 들어 append_node(&list , create_node(1)) 사용
(*head)=newnode; // head 가 null 일때 head 가 newnode 를 가르키게함.
}
else
{
node* tail = (*head);
while(tail-nextnode != null)// head 가 null 이 아닐때 임시로 tail 노드 생성 후 head 주소값을 줌
{
tail = tail - nextnode ;// 노드에 순차 접근하여 null 이 될때까지 이동
}
tail-nextnode = newnode;// 다음 노드를 가르키는 포인터가 null 인경우 생성된 newnode 를 가르키게 함
}
}
void menu (void)// 메뉴를 생성
{
printf(=================================\n);
printf(@@@ node 추가 (1) @@@@@@@@@@@@@@@\n);
printf(@@@ node 중간삽입 (2) @@@@@@@@@@@\n);
printf(@@@ node 지정출력 (3) @@@@@@@@@@@\n);
printf(@@@ node 전체출력 (4) @@@@@@@@@@@\n);
printf(=================================\n);
}
void booboon(node** head, int count)// 부분 노드 접근 하여 그 데이터를 출력 하기 위한 함수
{
int i = 0;// for 문을 돌리기 위한 변수
node* newnode;
newnode = (*head);
for(i=1 ; i != count ; i++)// 사용자가 접근하려는 x번째 노드를 접근 (for문 3번돌리면 3번째노드 접근)
{
newnode= newnode-nextnode ;
}
printf( %d, newnode-data);// 해당 노드 데이터 출력
printf(\n\n);
}
void insert_node (node** head , node* newnode, int count)// 중간 노드를 삽입하기 위한 함수 !!!! ( 이부분에서 막힘!!!)
{
int i = 0;//포문 돌리기 위한 변수
node* find;
//node* temp = null;
find = (*head);// find 에 head 주소값 대입
for(i=1 ; i != count ; i++)// 해sp;// 해당 노드 접근
{
find = find -nextnode ;
}
newnode = find-nextnode;// 본래 노드가 가르키고 있는 다음노드를 생성된 newnode 가 가르키게 함
//temp = newnode;
find-nextnode = newnode;// 본래 노드가 가르기고있는 다음노드를 생성된 newnode 로 바꿈
}
void main (void)
{
int num=0;// 메뉴 를 선택하기 위한 변수
int nnum=0;// 추가 할 노드 개수를 입력받기위한 변수
int input=0;//생성된 노드의 데이터를 입력받기 위한 변수
int i=0;//for 문 을 돌리기위 한 변수
node* list = null;
node* newnode = null;
while(1)
{
menu();
scanf(%d,&num);
switch (num){
case 1 :
{
printf( 노드를 몇개 추가할까요? \n);
scanf(%d, &nnum);
printf(\n\n);
printf(노드 추가중 .........\n);
for(i=1 ; i= nnum ; i++)
{
printf(새로운 노드 입니다. 데이터를 입력해주세요 \n,i);
scanf(%d,&input);
append_node(&list , create_node(input));
printf(노드 추가 완료. \n, i);
printf(\n\n);
}
break;
}
case 2 :
{int count = 0 ;
int input = 0;
printf(몇번째 노드에 삽입 하시겠습니까? \n);
scanf(%d,&count);
printf(중간 삽입 할 새로운 노드 입니다. 데이터를 입력해주세요. \n);
scanf(%d, &input);
insert_node(&list, create_node(input), count);
printf(노드 삽입 완료 되었습니다 \n\n);
break;
}
case 3 :
{
int count = 0;
printf( 몇번째 노드에 접근 하시겠습니까 ? \n);
scanf(%d,&count );
printf( %d번째 노드 data : \n , count);
booboon(&list, count);
break;
}
case 4 :
{
printf( 노드를 출력 합니다. \n);
printf( 현재 노드는 : \n);
for(newnode = list ; newnode != null; newnode = newnode-nextnode)
{
printf( %d \n,newnode-data);
}
printf(\n);
}
}
}}
-
커피우유
헐...........
진짜 감사...합니당... -
연보라
NewNode = Find-NextNode;
↓
NewNode-NextNode = Find-NextNode;
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |