책에 나온 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로 인식을 못하더군요..
왜 그런건지 쿨럭;;
부디 코드가 좀 길더라도~~ 답변부탁드려요 ㅇ-ㅇ..