질문: [C언어]이 프로그램 내에서 이중 포인터를 사용하는 이유가 뭔가요? | nucleus824 / 2005-01-21 22:39 | ||||||||||
링크드리스트를 작성한 프로그램입니다.. 여기서 이해 안되는곳이 insertNode라는 함수에서 첫번째 인자값을 이중 포인터로 선언되어있는데 왜 그런가요?? #include #include struct listNode { char data; struct listNode *nextPtr; }; typedef struct listNode ListNode; typedef ListNode *ListNodePtr; ListNodePtr createNode(void); void destroyNode(ListNodePtr); int insertNode(ListNodePtr *, ListNodePtr); char deleteNode(ListNodePtr *, char); int isEmpty(ListNodePtr); void printList(ListNodePtr); void instructions(void); int main() { ListNodePtr startPtr = NULL; ListNodePtr creNodePtr = NULL; int choice; char item; instructions(); printf("?"); scanf("%d", &choice); while(choice != 3) { switch(choice) { case 1: if( (creNodePtr = createNode() ) == NULL ) break; if( insertNode( &startPtr, creNodePtr) == -1) { destroyNode( creNodePtr ); break; } printList( startPtr ); break; case 2: if( !isEmpty( startPtr ) ) { printf( "Enter character to be deleted: "); scanf( "\n%c", &item ); if ( deleteNode( &startPtr, item ) ) { printf("%c deleted.\n", item ); printList( startPtr ); } else printf( "%c not found.\n\n", item ); } else printf( "List is empty.\n\n" ); break; default: printf( "Invalid choice.\n\n" ); instructions(); break; } printf( "? " ); scanf( "%d", &choice ); } printf( "End of run.\n" ); return 0; } ListNodePtr createNode(void) { ListNodePtr newPtr; newPtr = (ListNodePtr)malloc( sizeof( ListNode ) ); if( newPtr != NULL ) { newPtr->nextPtr = NULL; printf( "Enter a character: " ); scanf( "\n%c", &newPtr->data ); return newPtr; } else { printf( "Node is not created. No memory available.\n" ); return NULL; } } void destroyNode( ListNodePtr desPtr ) { free( desPtr ); } void instructions( void ) { printf( "Enter your choice:\n" " 1 to insert an element into the list.\n" " 2 to delete an element from the list.\n" " 3 to end.\n"); } int insertNode( ListNodePtr *sPtr, ListNodePtr newPtr ) { ListNodePtr previousPtr, currentPtr; char keyValue; previousPtr = NULL; currentPtr = *sPtr; keyValue = newPtr->data; while ( currentPtr!=NULL && keyValue > currentPtr->data ) { previousPtr = currentPtr; currentPtr = currentPtr->nextPtr; } if( currentPtr != NULL && currentPtr->data == keyValue ) { printf("\n%c is alread existed...\n", keyValue ); return -1; } if( previousPtr == NULL ) { newPtr->nextPtr = *sPtr; *sPtr = newPtr; } else { previousPtr->nextPtr = newPtr; newPtr->nextPtr = currentPtr; } return 0; } char deleteNode( ListNodePtr *sPtr, char keyValue ) { ListNodePtr previousPtr, currentPtr, tempPtr; if( keyValue == (*sPtr)->data ) { tempPtr = *sPtr; *sPtr = ( *sPtr )->nextPtr; destroyNode( tempPtr); return keyValue; } else { previousPtr = *sPtr; currentPtr = ( *sPtr )->nextPtr; while( currentPtr != NULL && currentPtr->data != keyValue ) { previousPtr = currentPtr; currentPtr = currentPtr->nextPtr; } if( currentPtr != NULL ) { tempPtr = currentPtr; previousPtr->nextPtr = currentPtr->nextPtr; destroyNode( tempPtr ); return keyValue; } } return '\0'; } int isEmpty( ListNodePtr sPtr) { return sPtr == NULL; } void printList( ListNodePtr currentPtr ) { if( currentPtr == NULL ) printf( "List is empty.\n\n" ); else { printf( "The list is:\n" ); while( currentPtr != NULL ) { printf( "%c -> ", currentPtr->data ); currentPtr = currentPtr->nextPtr; } printf( "NULL\n\n" ); } } |
|||||||||||
답변: re: [C언어]이 프로그램 내에서 이중 포인터를 사용하는 이유가 뭔가요? | iindra81 / 2005-01-21 01:23 | ||||||||||
포인터는 이해하기가 어렵죠 ㅠ ㅅ ㅠ
제대로 개념을 잡지 못하면 상당히 헤메게 됩니다..;;
(나는 과연 제대로 알고있을까..ㅋ)
아무튼 문제에 대한 답변을 하자면요..
위의 프로그램에서 ListNode x 라고 ...
'c or linux' 카테고리의 다른 글
|