您的位置:首页 > 其它

线性表--链表

2015-08-10 14:35 337 查看
链表的使用及简单功能

template <typename T>
typedef struct Node
{
T Data;
struct Node *Next;
} List;
List L,*PtrL;
//求表长
int Length(List *PtrL)
{
List*p=PtrL;//指向表头
int j=0;
while(p)//到表尾
{
P=p->Next;
j++;
}
return j;
}
/*查找*/
//1.按序号查找
List *FiindKth(int k,List *PtrL)
{
List *p=PtrL;
int i=1;
while(p!=NULL&&i<k)
{
p=p->Next;
i++;
}
if(i==k)return p;
else return NULL;
}
//2.按值查找
template <typename T>
List *Find(T k,List*PtrL)
{
List*P=PtrL;
while(p->Next!=NULL&&p->Data!=k)
p=p->Next;
return p;
}
/*插入结点*/
template <tempname T>
List *Insert(T X,int i,List*PtrL)
{
List*p,*s;
if(i==1)//当插入结点为表头时
{
s=new List;
s->Data=X;
s->Next=PtrL;
return s;
}
p = FindKth( i-1, PtrL );   /* 查找第i-1个结点 */
if(p==NULL)
{
cout<<"参数错误"<<endl;
return NULL;
}
else
{
s=new List;
s->Data=X;
s->Next=p->Next;//插入第i-1结点后面
p->Next=s;
return PtrL;
}
}
/*删除结点*/
List *Delete(int i,List*PtrL)
{
List*p,*s;
if(i==1)
{
s=PtrL;
if(PtrL!=NULL)PtrL=PtrL->Next;
else return NULL:
delete s;//释放该结点的空间,防止内存溢出
return PtrL;
}
P=FindKth(i-1,PtrL);
if(p==NULL)
{
cout<<"该结点不存在"<<endl;
return NULL;
}
else if (p->Next==NULL)
{
cout<<"该结点不存在"<<endl;
return NULL;
}
else
{
s=p->Next;//s指向第i个结点
p->Next=s->Next;
delete s;
return PtrL;//返回表头
}
}


慢慢分析链表的结构和操作其实并不麻烦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: