링크드 리스트 관련입니다..^^(고수님들의 빠른 답변 부탁드립니다.^^)
멈짓체
일단 만드려고 하는 프로그램은 알파벳 단어를 삽입, 정렬 출력 하고 파일 입출력까지 하는 것인데요.
입출력 전까지의다른 기능들을 구현 하려고 합니다.
다름 분들이 코딩해 놓은것들을 참고 하면서 열심히 하고 있는데요
에러가 없으나 정작 실행을 하려고 할땐 오류때문에 실행이 안되네요..
제가 보기에는 논리 오류인것 같은데
아마 del 함수에서 많은 문제가 있는것 같습니다.
일단 코드 공개하겠습니다.
///////////////////////////////////////////////////////////////////
#include stdio.h
#include stdlib.h
#include conio.h
#include string.h
typedef struct _node
{
char key[100];
struct _node *next;
}NODE;
NODE* start = NULL;
void insert(void);
void print(void);
void sort(void);
void del(void);
void main(void)
{
int no;
while(1)
{
system(cls);
puts(*** MENU ***);
puts(1. INSERT);
puts(2. PRINT);
puts(3. SORT);
puts(4. DEL);
puts(5. END);
printf(choice : );
scanf(%d, &no);
fflush(stdin);
switch(no)
{
case 1 : insert(); break;
case 2 : print(); break;
case 3 : sort(); break;
case 4 : del(); break;
case 5 : exit(1);
}
getch();
}
}
void insert(void)
{
NODE* newnode, *cur;
newnode = (NODE*)malloc(sizeof(NODE));
printf(Input String : );
gets(newnode-key);
fflush(stdin);
newnode-next = NULL;
if(start == NULL)
{
start = newnode;
printf(배열이 비어있을 때 삽입...\n);
}
else
{
cur = start;
while(cur-next != NULL)
{
cur = cur-next;
}
cur-next = newnode;
printf(배열의 맨 마지막에 삽입...\n);
}
}
void print(void)
{
NODE* cur;
if(start == NULL)
{
printf(\t연결리스트가 구성되어있지 않아 출력할 수 없습니다...\n);
return;
}
printf(\t PRINT \n);
cur = start;
while(cur-next != NULL)
{
printf(%s - , cur-key);
cur = cur-next;
}
printf(%s\n, cur-key);
}
void sort(void)
{
int cnt, i, j;
NODE* cur, **ptr;
if(start == NULL)
{
printf(연결리스트가 구성되어있지않아 정렬할 수 없습니다...\n);
return;
}
cnt = 1;
cur = start;
while(cur-next != NULL)
{
cnt++;
cur = cur-next;
}
ptr = (NODE**)malloc(sizeof(NODE*) * cnt);
for(i = 0, cur = start; i cnt; i++, cur = cur-next)
ptr[i] = cur;
for(i = 0; i cnt; i++)
{
for(j = i+1; j cnt; j++)
{
if(strcmp(ptr[i]-key, ptr[j]-key) 0)
{
cur = ptr[i];
ptr[i] = ptr[j];
ptr[j] = cur;
}
}
}
start = ptr[0];
for(cur = start, i = 1; i cnt; i++, cur = cur-next)
cur-next = ptr[i];
cur-next = NULL;
free(ptr);
printf(\t정렬이 완료되었습니다..\n);
}
void del()
{
char key[100];
NODE *cur, *del;
if(start == NULL)
{
printf(\n연결 리스트에 자료가 없음);
return;
}
printf(삭제할 단어 입력 : );
scsnf(%s, &key);
fflush(stdin);
cur = start;
//첫번째 노드 삭제했을 경우
if (strcmp(cur-key, key == 0))
{
start = cur-next;
printf(\n첫번째 노드 %s 삭제\n, cur-key);
free(cur);
return;
}
//두번째 노드부터 삭제할 경우
while(cur-next !=NULL)
{
if (strcmp(cur-next-key, key)==0)
{
del=cur-next;
cur-next=del-next;
printf(노드 %s 삭제..\n, del-key);
free(del);
return;
}
cur=cur-next;
printf(노드로부터 검색된 이름이 없습니다.\n);
return;
}
}
////////////////////////////////////////////////////////////
이 코딩인데요.
질문 하겠습니다.
1. del 함수에 문제가 있는 것 같은데 어떤 문제점이 있는지 가르쳐 주시겠습니까?^^(굵은 글씨로 표시했습니다.)
보시고 수정을 해주시면 정말 감사하겠습니다.ㅠㅠ///
2. 기능이 모두 구현이 된다면 이제 파일 입출력을 해야하는데 자료연결 리스트의 파일 입출력은 어떤 방법으로 해야 하는지궁금합니다. 예를 들어서 설명해주시기를 부탁드립니다.ㅠㅠㅠㅠ
-
강남맨
void del()
{
...
printf(\삭제할 단어 입력 : \);
scanf(\%s\