单链表:线性表的链接存储结构
单链表的结点结构:
data:存储数据元素
next:存储指向后继结点的地址
单链表的结点结构:
template
structNode
{
T data;
Node *next;
};
Node *s, *first;
引用数据元素:
引用指针域: s->next;
单链表类的声明:
template
class LinkList
{
public:
LinkList( );
LinkList(Ta[ ], intn);
~LinkList( );
Int Length( );
T Get(inti);
Int Locate(T x);
void Insert(inti, T x);
T Delete(inti);
void PrintList( );
private:
Node *first;
};
遍历:void PrintList();
template
intLinkList:: PrintList()
{
p=first->next;
while (p!=NULL)
{
cout<data;
p=p->next; }
}
求线性表的长度:int Length();
template
int LinkList:: Length()
{
p=first->next;count=0;
while (p!=NULL)
{ count++; p=p->next; }
return count;
}
按位查找:T Get(inti);
template
T
LinkList::Get(inti)
{
p=first->next;
j=1;
while (p!=NULL && j<i)
{ p=p->next;
j++; }
if (p==NULL)
throw “位置”;
else return p->data;
}
按值查找:int Locate(T x )
template
intLinkList::Locate(T x)
{
p=first->next;
j=1;
while §
{ if(p->data==x)return j;
else {
p=p->next; j++; }
}
return 0;
}
插入:void Insert(inti, T x);
template
void LinkList::Insert(inti, T x)
{
p=first ;
j=0;
while (p!=NULL && j<i-1)
{ p=p->next; j++; }
if (p==NULL) throw “位置”;
else {
s=new Node;
s->data=x;
s->next=p->next;
p->next=s; }
}
构造函数:
(1)
无参构造函数LinkList()
template
LinkList:: LinkList()
{
first=new
Node;
first->next=NULL;
}
(2)
有参构造函数 LinkList(Ta[ ], intn)
头插法:
template
LinkList:: LinkList(Ta[ ], intn)
{
first=new
Node;
first->next=NULL;
for (i=0; i<n; i++)
{ s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s; }
}
尾插法:
template
LinkList:: LinkList(Ta[ ], intn)
{
first=new Node ;
rear=first;
for (i=0; i<n; i++)
{ s=new Node ;
s->data=a[i];
rear->next=s;
rear=s;
}
rear->next=NULL;
}
删除:T Delete(int i);
template
T LinkList::Delete(int i)
{
p=first ;
j=0;
while (p && j<i-1)
{ p=p->next; j++; }
if (p==NULL | | p->next ==NULL)
throw “位置”;
else {
q=p->next;
x=q->data;
p->next=q->next;
delete q;
return x; }
}
析构函数: ~LinkList( );
template
LinkList:: ~LinkList( )
{
p=first;
while (p!=NULL)
{ q=p;
p=p->next;
delete q;
}
}