链表有关问题
链表问题
//linklist.h
#include <iostream.h>
#include <stdlib.h>
template <class type> class linklist;
template <class type> class node
{
friend class linklist <type> ;
private:
node <type> *next;
public:
type data;
node(node <type> *pnext=NUll);//构造函数,用于构造头结点
node(const type&item,node <type> *pnext=NULL);//构造函数,用于构造非头结点
void setnext(node <type> *p){next=p;}
void setdata(const type&x){data=x;}
~node();
};
template <class type> class linklist
{
private:
node <type> *head;
node <type> *pcurrent;
public:
linklist();
~linklist();
int length()const;
type getCurrent()const;
node <type> *locate(type&x);
void insterBefore(const type&x);
void insterAfter(const type&x);
type deleteCurrent();
int isempty()const;
void clear();
node <type> *reset(int i);//使第i个结点成为当前结点
node <type> *next();//使当前结点指针指向下一个节点
int endofList()const;
void freeList();
};
//linklist.cpp
#include "linklist.h "
template <class type> node <type> ::node(node <type> *pnext)
{
next=pnext;
}
template <class type> node <type> ::node(const type&item,node <type> *pnext)
{
data=item;
next=pnext;
}
template <class type> linklist <type> ::linklist()
{
head=pcurrent=new node <type> ();
head-> next=NULL;
}
template <class type> linklist <type> ::~linklist()
{
}
template <class type> void linklist <type> ::freeList()
{
clear();
delete head;
}
template <class type> int linklist <type> ::length()const
{
node <type> *p=head-> next;
int len=0;
while(p!=NULL)
{
len++;
p=p-> next;
}
return len;
}
template <class type> type linklist <type> ::getCurrent()const
{
if (pcurrent==head||pcurrent==NULL)
{
cerr < < "未取到数据值 " < <endl;
exit(1);
}
return pcurrent-> data;
}
template <class type> node <type> *linklist <type> ::locate(type&x)
{
pcurren=head-> next;
while(pcurrent!=NULL)
{
if(pcurrent-> data==x)
break;
else
pcurrent=pcurrent-> next;
}
return pcurrent;
}
template <class type> void linklist <type> ::insterBefore(const type&x)
{
if(head-> next==NULL)
{
node <type> *newnode=new node <type> (x,NULL);
head-> next=pcurrent=newnode;
}
else
{
node <type> *newnode=new node <type> (x,pcurrent);
node <type> *p=head;
while(p-> next!=pcurrent)p=p-> next;
//linklist.h
#include <iostream.h>
#include <stdlib.h>
template <class type> class linklist;
template <class type> class node
{
friend class linklist <type> ;
private:
node <type> *next;
public:
type data;
node(node <type> *pnext=NUll);//构造函数,用于构造头结点
node(const type&item,node <type> *pnext=NULL);//构造函数,用于构造非头结点
void setnext(node <type> *p){next=p;}
void setdata(const type&x){data=x;}
~node();
};
template <class type> class linklist
{
private:
node <type> *head;
node <type> *pcurrent;
public:
linklist();
~linklist();
int length()const;
type getCurrent()const;
node <type> *locate(type&x);
void insterBefore(const type&x);
void insterAfter(const type&x);
type deleteCurrent();
int isempty()const;
void clear();
node <type> *reset(int i);//使第i个结点成为当前结点
node <type> *next();//使当前结点指针指向下一个节点
int endofList()const;
void freeList();
};
//linklist.cpp
#include "linklist.h "
template <class type> node <type> ::node(node <type> *pnext)
{
next=pnext;
}
template <class type> node <type> ::node(const type&item,node <type> *pnext)
{
data=item;
next=pnext;
}
template <class type> linklist <type> ::linklist()
{
head=pcurrent=new node <type> ();
head-> next=NULL;
}
template <class type> linklist <type> ::~linklist()
{
}
template <class type> void linklist <type> ::freeList()
{
clear();
delete head;
}
template <class type> int linklist <type> ::length()const
{
node <type> *p=head-> next;
int len=0;
while(p!=NULL)
{
len++;
p=p-> next;
}
return len;
}
template <class type> type linklist <type> ::getCurrent()const
{
if (pcurrent==head||pcurrent==NULL)
{
cerr < < "未取到数据值 " < <endl;
exit(1);
}
return pcurrent-> data;
}
template <class type> node <type> *linklist <type> ::locate(type&x)
{
pcurren=head-> next;
while(pcurrent!=NULL)
{
if(pcurrent-> data==x)
break;
else
pcurrent=pcurrent-> next;
}
return pcurrent;
}
template <class type> void linklist <type> ::insterBefore(const type&x)
{
if(head-> next==NULL)
{
node <type> *newnode=new node <type> (x,NULL);
head-> next=pcurrent=newnode;
}
else
{
node <type> *newnode=new node <type> (x,pcurrent);
node <type> *p=head;
while(p-> next!=pcurrent)p=p-> next;