有关C链表的小程序, 在VC6下面链接时报错,请高手解答
整个程序分三个文件组成YanLinkedList.c YanLinkedList.h 和test.c
其中前两个文件写了一个链表, test.c负责对调用并测试这个链表.结果在链接时报这样的错误:
ERROR:
________
test.obj : error LNK2001: unresolved external symbol "int __cdecl InitialLinkedList(struct _DataNode * *)" (?InitialLinkedList@@YAHPAPAU_DataNode@@@Z)
Debug/billing.exe : fatal error LNK1120: 1 unresolved externals
源代码:
/******************************************************************************
* YanLinkedList.h*/
#ifndef LINKEDLIST_FORALL_H
#define LINKEDLIST_FORALL_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*你自己的结构所在的头文件*/
/*#include "tc.h"*/
typedef char KEY[11];
typedef struct TEST_DATA
{
KEY key;
}DATA_T_X;
typedef DATA_T_X DATA_T;
int CompareKey(const KEY * pkLeft,const KEY * pkRight);
int CompareKey(const KEY * pkLeft,const KEY * pkRight)
{
return strcmp(*pkLeft,*pkRight);
}
typedef struct _DataNode
{
DATA_T data; /* 数据*/
struct _DataNode * prev; /* 指向前一个节点 */
struct _DataNode * next; /* 指向后一个节点 */
}DATANODE,*PDATANODE;
int InitialLinkedList( DATANODE **head );
int DestroyLinkedList( DATANODE *head );
DATANODE * SearchLinkedList( const DATANODE *head,const KEY * key );
DATANODE * InsertLinkedList( DATANODE ** head,const DATA_T * data );
DATANODE * RemoveNode( DATANODE ** head,const KEY * key );
int DeleteNode( DATANODE ** head,const KEY * key );
#endif /*AVLhead_FORALL_H*/
/******************************************************************************
* YanLinkedList.c*/
#include "YanLinkedList.h"
/************************************************************************/
int Compare(const DATANODE *,const KEY *);
DATANODE * MakeNode(const DATA_T * data);
int InitialLinkedList(DATANODE **head )
{
*head=NULL;
return 0;
}
int DestroyLinkedList( DATANODE *head )
{
DATANODE *tmp_Node = head;
if(head == NULL)/*空链表*/
return 0;
if(head->next == head)/*只有一个节点的链表*/
{
free(head);
return 0;
}
do
{
head = head->next;
free(head->prev);
}while(head->next != tmp_Node);
free(head);
return 0;
}
DATANODE * SearchLinkedList( const DATANODE *head,const KEY *key)
{
DATANODE *tmp_p_Node;
if(head==NULL)/*空链表*/
return NULL;
tmp_p_Node = head->next->prev;
do
{
if(Compare(tmp_p_Node, key)==0){
return tmp_p_Node;
}
tmp_p_Node = tmp_p_Node->next;
}while(head != tmp_p_Node);
return NULL;
}
DATANODE * InsertLinkedList( DATANODE ** head,const DATA_T * data )
{
DATANODE * node;
DATANODE * pRotateNode=NULL;
if(*head==NULL)
{
/*这里处理的是第一次加入链表,这个是根结点*/
*head=MakeNode(data);
(*head)->next = *head;
(*head)->prev = *head;
return *head;
}
/*头结点右侧插入新节点,头结点指针指向新插入的节点*/
node = MakeNode(data);
(*head)->next->prev = node;
node->next = (*head)->next;
node->prev = *head;
(*head)->next = node;
*head = node;
return node;
}
DATANODE * RemoveNode( DATANODE ** head,const KEY * key )
{
DATANODE * curr;
curr=SearchLinkedList(*head,key);
if(curr==NULL)
{
return NULL;
}
curr->next->prev = curr->prev;
curr->prev->next = curr->next;
curr->next = curr->prev = NULL;
return curr;
}
int DeleteNode( DATANODE ** head,const KEY * key )
{
DATANODE * node=RemoveNode( head,key );
if(node==NULL)
{
return -1;
}
free(node);
return 0;
}
int Compare(const DATANODE * pNode,const KEY * pKey)
{
if(pNode == NULL)
return 1;
return CompareKey(&(pNode->data.key),pKey);
}
DATANODE * MakeNode(const DATA_T * data)
{
DATANODE * node;
node=(DATANODE *)malloc(sizeof(DATANODE));
memset(node,0,sizeof(DATANODE));
memcpy(&node->data,data,sizeof(DATA_T));
return node;
}
/******************************************************************************
* Test.c*/
#include "YanLinkedList.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main(int argc, char *argv[])
{
DATANODE *head=NULL;
DATA_T_X TestDatas[100];
int i =0;
InitialLinkedList(&head);
for(i = 0; i < 100; i++)
{
memset(TestDatas[i].key, 0, sizeof(KEY));
sprintf(TestDatas[i].key, "is %d\n", i);
/*InsertLinkedList(&head,&TestDatas[i]);*/
printf(TestDatas[i].key);
}
system("PAUSE");
return 0;
}