刚刚开始学c++学写链表。。学校用的vs2008不太会用,报错看不懂,查了百度说要加什么库,但是好像也没用什么库。。还望指教= =十分感谢
//main.cpp
// linklist.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "declar.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ElemType la[20],lb[20],n;
int i;
LinkList LA=NULL,LB=NULL;
InputList_L(la);
InputList_L(lb);
InitList_L(LA,la);
InitList_L(LB,lb);
ListTraver_L(LA);
ListTraver_L(LB);
cout<<"Insert(LA): "<<"Position: "<<endl;
cin>>n>>i;
ListInsert_L(LA,i+1,n);
ListTraver_L(LA);
cout<<"Delete position(LB):";
cin>>i;
ListDelete_L(LB,i,n);
ListTraver_L(LB);
cout<<"Delete data:"<<n<<endl;
cout<<"Find data(LA):";
cin>>n;
i=FindData_L(LA,n);
cout<<"Position:"<<i<<endl;
cout<<"Merge LA and LB"<<endl;
MergeList_L(LA,LB);
ListTraver_L(LA);
return 0;
}
//declar.h
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
LNode *next;
}LNode,*LinkList;
Status InitList_L(LinkList,ElemType *);//创建带头节点的单链表
Status ListInsert_L(LinkList,int,ElemType);//在链表元素i前插入元素e
Status ListDelete_L(LinkList,int,ElemType);//删除第i个节点,用e带回
ElemType FindData_L(LinkList,ElemType);//查找元素n
void MergeList_L(LinkList,LinkList);//合并两个链表
void ListTraver_L(LinkList);//打印链表元素
void InputList_L(ElemType *);//输入数据
//fun.cpp
#include "stdafx.h"
#include<iostream>
#include"declar.h"
using namespace std;
Status InitList_L(LinkList &L,ElemType *ptr)//创建一个带头节点的单链表
{
L=new LNode;
LinkList p;
if(!L) return ERROR;
L->next=NULL;
while(*ptr) ptr++;
ptr--;
while(*ptr){
p=new LNode;
p->data=*ptr--;
p->next=L->next;
L->next=p;
}
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)//在链表元素i前插入元素e
{
LinkList p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
LinkList s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)//删除第i个节点,用e带回值
{
LinkList p=L->next;
int j=1;
while(!p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
ElemType FindData_L(LinkList L,ElemType n)//查找元素n
{
LinkList p=L->next;
int j=1;
while(p){
if(p->data==n)
break;
p=p->next;
j++;
}
return j;
}
void MergeList_L(LinkList &LA,LinkList &LB)//合并两个链表
{
LinkList pa=LA->next,pb=LB->next;
if(pb->next)
pb=pb->next;
pa=LA->next;
LA->next=LB->next;
pb->next=pa;
free(LB);
}
void ListTraver_L(LinkList L)//打印链表元素
{
LinkList p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n"<<endl;
}
void InputList_L(ElemType *p)//输入数据
{
int i,n;
cin>>n;
for(i=0;i<n;i++)
cin>>*p++;
}
//vs2008报错
1>------ 已启动生成: 项目: linklist, 配置: Debug Win32 ------
1>正在链接...
1>linklist.obj : error LNK2019: 无法解析的外部符号 "void __cdecl MergeList_L(struct LNode *,struct LNode *)" (?MergeList_L@@YAXPAULNode@@0@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ListDelete_L(struct LNode *,int,int)" (?ListDelete_L@@YAHPAULNode@@HH@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ListInsert_L(struct LNode *,int,int)" (?ListInsert_L@@YAHPAULNode@@HH@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl InitList_L(struct LNode *,int *)" (?InitList_L@@YAHPAULNode@@PAH@Z),该符号在函数 _wmain 中被引用
1>C:\Users\air\Documents\Visual Studio 2008\Projects\linklist\Debug\linklist.exe : fatal error LNK1120: 4 个无法解析的外部命令
1>生成日志保存在“file://c:\Users\air\Documents\Visual Studio 2008\Projects\linklist\linklist\Debug\BuildLog.htm”
1>linklist - 5 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
函数的声明和定义的函数签名都不一样能成功怪了。。。