메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

책에 나온 SLL을 직접 짜봤는데,, 컴파일에서 에러가 뜨네요..

2010-02-12

|

by chunlangs

3497

책에 나온 p39~41의 SLL을  보기만 해서는 안될 것같아 함수부분 이라도 직접짜보려고 하는데;;

왠지 모르게 책에 나온 코드는 에러가 안뜨는데;

제가 짜니까 에러가 뜨네요..  코드도 거의 일치하는데 왜 그런지 모르겟어요..

코드 좀 봐주시겠어요?

[헤더부분]
//void SLL_InsertNewHead()이 함수는 복잡할 것 같아 일부러 뺐어요.

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include
#include

typedef int ElementType;

typedef struct tagNode
{
    ElementType Data;
    struct tagNode* NextNode;
} Node;

/* 함수 원형 선언 */
Node* SLL_CreateNode(ElementType NewData);
void  SLL_DestoryNode(Node* Node);
void  SLL_AppendNode(Node** Head, Node* NewNode);
void  SLL_InsertAfter(Node* Current, Node* NewNode);
void  SLL_RemoveNode(Node** Head, Node* Remove);
Node* SLL_GetNodeAt(Node* Head, int Location);
int   SLL_GetNodeCount(Node* Head);

#endif

[LinkedList.c]
#include "LinkedList.h"

Node* SLL_CreateNode(ElementType NewData)
{
        Node* NewNode=(Node*)malloc(sizeof(Node));

        NewNode->Data=NewData;
        NewNode->NextNode=NULL;


        return NewNode;
}

void SLL_DestoryNode(Node* Node)
{
        free(Node);
}


void SLL_AppendNode(Node** Head,Node* NewNode)
{
                if( (*Head)==NULL)
                {
                        *Head=NewNode;

                }
                else{
                        Node* temp=*Head;

                        while(temp->NextNode!=NULL)
                        {
                                temp=temp->NextNode;
                        }

                        temp->NextNode=NewNode;
                }

}



void SLL_InsertAfter(Node* Current,Node* NewNode)
{
        NewNode->NextNode=Current->NextNode;        
        Current->NextNode=NewNode;
}

void SLL_RemoveNode(Node** Head, Node* Remove)
{
        if(Remove == (*Head))
        {
                *Head=Remove->NextNode;
                Remove->NextNode=NULL;
        }
        else{
        Node* Current = *Head;

        while(Current->NextNode!=Remove){
                Current=Current->NextNode;
        }

        Current->NextNode=Remove->NextNode;
        Remove->NextNode=NULL;
}


//Location은 노드의 차례수
Node* SLL_GetNodeAt(Node* Head, int Location)
{
        Node* Current = Head;

        while ( Current != NULL && (--Location) >= 0)
        {
                Current=Current->Data;
        }

        return Current;
}


int SLL_GetNodeCount(Node* Head)
{
        int Count = 0;
        Node* Current = Head;
        
        while(Current !=NULL)
        {
                Current=Current->NextNode;
                Count++;
        }

        return Count;
}

[main.c]

#include "LinkedList.h"


int main(void)
{

        int i = 0 ,Count = 0;
        Node* List =NULL;
        Node* Current = NULL;
        Node* NewNode = NULL;
        
        for( i=0;i<5;i++){
        
        NewNode=SLL_CreateNode(i);
        SLL_AppendNode(&List,NewNode);

        }

        //리스트 출력
        Count=SLL_Get_Node_At(List);
        for( i = 0; i         {
                Current =SLL_GetNodeAt(List,i);
                printf("List[%d] : %d\n",i,Current->Data);
        }

        Current = SLL_GetNodeAt(List,2);
        NewNode = SLL_CreateNode(3000);

        SLL_InsertAfter(Current,NewNode);

        Count=SLL_Get_Node_At(List);
        for( i = 0; i         {
                Current =SLL_GetNodeAt(List,i);
                printf("List[%d] : %d\n",i,Current->Data);
        }

        
        
        return 0;
}


여기서
linkedlist.c(68) : error C2275: Node : illegal use of this type as an expression
1>        c:\users\김형준\documents\visual studio 2008\projects\make_sll\make_sll\linkedlist.h(13) : see declaration of Node

이런 오류가 뜨면서 Node*관련 ㅊCurrent변수 같은 것들이 undeclared identifier로 인식을 못하더군요..

왜 그런건지 쿨럭;;

부디 코드가 좀 길더라도~~ 답변부탁드려요  ㅇ-ㅇ..
댓글 입력