您的位置:首页 > 其它

单链表的基本操作

2014-11-08 17:03 295 查看
1,单链表储存结构:



typedef int ElemType;
 typedef struct  node
{
    ElemType data;
    node *next ;
}LNode, *LinkList;


2,创建单链表(头插法和尾插法):

LinkList Creat_tail_LinkList()       //尾插法:
{
     LinkList L,p;
     L=(LinkList)malloc(sizeof(LNode));
     L->next=NULL;
     int n,x;
     scanf("%d",&n);
     for(int i=n;i>0;i--)
     {
         scanf("%d",&x);
         p=(LinkList)malloc(sizeof(LNode));
         p->data=x;
         p->next=L->next;
         L->next=p;
     }
     return L;
}
LinkList Creat_top_LinkList()        //头插法
{
    LinkList L,p,q;
    L=(LinkList)malloc(sizeof(LNode));
    q=L;
    int n,x;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&x);
        p->data=x;
        q->next=p;
        q=p;
    }
    q->next=NULL;
    return L;
}


3. 查找元素:

LinkList Locate_anw_LinkList(LinkList L,ElemType e)     //按值查找
{
    scanf("%d",&e);
    LinkList p=L->next;
    while(p&&p->data!=e)
        p=p->next;
    return p;
}

int Locate_cur_LinkList(LinkList L,ElemType cur,ElemType &tot)   //按位置查找并将元素输出;
{
    scanf("%d",&cur);
    int j;
    LinkList p=L->next;
    j=1;
    while(p&&j<cur)
    {
        p=p->next;
        j++;
    }
    if(!p||j>cur)  return 0;
    tot=p->data;
    return 1;
}


4,插入元素:



void Insert_LinkList(LinkList &L,ElemType cur,ElemType hh)         //在指定位置插入元素
{
    LinkList p,s;
    p=L;
    int j=0;
    while(p&&j<cur-1)     //注意点:&&
    {
        p=p->next;
        j++;
    }
    if(!p||j>cur-1)  return ;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=hh;
    s->next=p->next;
    p->next=s;
}


5,删除元素:

int Dele_LinkList(LinkList &L,ElemType cur,ElemType &ss)      //在指定位置删除元素
{
    LinkList p;
    p=L;
    int j=0;
    while(p->next&&j<cur-1)
    {
        p=p->next;
        j++;
    }
    if(!p->next||j>cur-1)  return 0;
    ss=p->next->data;
    p->next=p->next->next;
    return 1;
}


6,输出单链表元素:

void Printf_LinkList(LinkList L)                //输出单链表中的元素
{
    LinkList p;
    p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}


7,单链表合并:

void Merge_LinkList(LinkList &La,LinkList &Lb,LinkList &Lc)      //合并两个递增单链表
{
    //LNode *pa,*pb,*pc;
    LinkList pa,pb,pc;
    pa=La->next;
    pb=Lb->next;
    Lc=pc=La;
    while(pa&&pb)
    {
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
    }
    pc->next=pa?pa:pb;
    free(Lb);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: