c++单链表的创建及相关操作
#include "iostream"
using namespace std;
typedef int Elemtype ;
struct LNode{
Elemtype data;
LNode *next;
};
typedef LNode *Linklist;
void input(Elemtype *ep) { cin>>*ep;}
void creatlink(Linklist *L, int n, void (*input)(Elemtype*))
{ Linklist p,s;
p=*L =new LNode;
for(;n>0;n--){
s=new LNode;
input(&s->data);
p->next=s,p=s;
}
p->next=NULL;
}
void traverse(Linklist L,void(*visit)(Elemtype *))
{
Linklist p=L->next;
while(p!=NULL)
{
visit(&(p->data));
p=p->next;
}
}
void visit(Elemtype *ep){cout<<*ep<<endl;}
int locate(Linklist L,Elemtype e,int(*compare)(Elemtype *,Elemtype*))
{
int i=0;
Linklist p=L->next;
while(p!=NULL)
{
i++;
if(compare(&(p->data),&e)) cout<<i;
p=p->next;
}
return 0;
}
int compare(Elemtype *ep1,Elemtype *ep2)
{return *ep1==*ep2;}
int insert(Linklist *L,int i,Elemtype e)
{
Linklist s,p=*l;
while(p!=NULL && i>1) {p=p->next,i--;}
if(p==NULL || i<1) return 0;
s=new LNode;
s->data=e;
s->next=p->next,p->next=s;
return 1;
}
int Sdelete(Linklist *L,int i, Elemtype *ep)
{
Linklist p=NULL,q=*L;
while(q!=NULL && i>=1)
{
p=q;
q=q->next;
i--;
}
if(p==NULL || q==NULL) return 0;
p->next=q->next;
if(ep!=NULL) *ep=q->data;
delete q;
return 1;
}
int main()
{
Linklist L;int n=3,e=2;
creatlink(&L,n,input);
traverse(L,visit);
locate(L,e,compare);
Sdelete(L,n,&ep);
return 0;
}