링크드 리스트 정렬질문좀요 ㅠ
잠팅이
#includestdio.h
#includestdlib.h
struct node{
int value;
struct node* next;
};
struct node *head; //머리 노드
void init()
{
head = NULL;
}
//머리 노드 초기화
void show_list();
void insert_num();
void search_list();
void delete_list();
void array_list();
void main()
{
int sel;
while(1)
{
printf(1.Insert\n);
printf(2.Show\n);
printf(3.Delete\n);
printf(4.Search\n);
printf(5.Array number\n);
printf(6.End\n);
printf(Enter the wanted key : );
scanf(%d,&sel);
switch(sel)
{
case 1:
insert_num();
break;
case 2:
show_list();
break;
case 3:
delete_list();
break;
case 4:
search_list();
break;
case 5:
array_list();
break;
case 6:
exit(1);
}
}
}
void insert_num() //값을 삽입하는 함수이다.
{
struct node* temp;
struct node* tail;
//temp는 입력한 값을 받는 함수이고, tail은 리스트가 2개 이상일 경우 리스트의 끝을 찾기 위한 변수.
int num;
temp = (struct node*)malloc(sizeof(struct node));//나중에 free해줘야함.
printf(Enter the insert number :);
scanf(%d,&num);
temp-value = num;
temp-next = NULL;//이 구문이 꼭 필요하다.없을 경우 계속 에러 발생.중요.
if(head == NULL) //리스트가 없을 경우.
{
head = temp;
}
else if(head-next == NULL)//리스트가 1개 일 경우.
{
head-next = temp;
}
else//리스트가 2개 이상 일 경우.
{
tail = head;
while(tail-next != NULL)
{
tail = tail-next;
}
tail-next = temp;
//끝에 도달했을 경우 tail의 끝에다가 입력한 값을 링크시킨다.
//여기서 head는 temp를 받기 때문에 동적할당이 같이 된 상태라고 보면 된다.
//while문에서 tail-next != NULL 과 tail != NULL 의 차이점은 중요하다
/*
tail-next != NULL : 가장 마지막 노드를 가르키고 있을 경우
tail != NULL : 가리키는곳이 없을때, 즉 리스트의 마지막을 벗어났을 경우.
*/
}
}
void search_list()
//원하는 숫자가 있는지 검색하는 함수.
{
int num,flag;
struct node* check;
flag = 0 ;
check = head;
printf(Enter the search num : );
scanf(%d,&num);
while(check != NULL)
{
if(check-value == num)
{
puts(The key is exist);
flag =1;
break;
}
check = check-next;
}
if(flag ==0)
puts(The key is not exist);
}
void delete_list()
{
//지울때도 3가지를 고려해야 한다.
//1.리스트가 비어 있을경우
//2.list의 첫번째가 같을 경우
//3.list의 두번째가 같을 경우
int num;
struct node* curr;
struct node* prev;
printf(Enter the delete num : );
scanf(%d,&num);
if(head == NULL)//1번 case일 경우
{
}
else if(head-value == num)//2번 case일 경우
{
curr = head;
head = head-next;
free(curr);
}
else //3번 case일 경우.
{
prev=head;
curr=prev-next;
while(curr!=NULL && curr-value != num)
{
prev = curr;
curr = curr-next;
}
if(curr != NULL)
{
prev-next = curr-next;
free(curr);
}
}
}
void show_list() //삽입된 값들을 보여주는 함수.
{
struct node* tmp;
tmp = head;
printf(List : );
while(tmp != NULL)
{
printf(%d - , tmp-value);
tmp = tmp-next;
}
printf(\n);
}
void array_list()
{
}
}
여기서 값을 다 입력받고 나서 메뉴의 5번을 누르면 정렬이 되게 할려고 햇는데요.. value값을 바꾸는게 next를 이용해서 할려고 했는데요
하다보니 값도 안바꾸고 프로그램이 죽어버리고 하네요 ㅠㅠ void array_list() 함수안에 적절히좀 소스좀 부탁드릴게요 ㅠㅠ
하루죙일 고민하는데 아직 링크드 리스트가 어렵게 느껴져서 잘 안되네요 ㅠㅠ
array_list()함수안에 제가 작성하던 소스가 있긴한데 되지도 않아서 걍 비워버렸어요.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
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 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |