c++单链表的创建及相关操作

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;  //q指向头结点
    while(q!=NULL && i>=1) //查找第i-1个结点
    {
      p=q; // p是q的前驱结点
      q=q->next;
      i--;

    }
    if(p==NULL || q==NULL) return 0;
    p->next=q->next;    //删除结点并有*ep返回值
    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;
}

猜你喜欢

转载自blog.csdn.net/depth_perception/article/details/90178201