码迷,mamicode.com
首页 > 其他好文 > 详细

单链表的基本操作

时间:2014-11-08 18:19:36      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   for   on   2014   log   bs   

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);
}



单链表的基本操作

标签:style   blog   color   sp   for   on   2014   log   bs   

原文地址:http://blog.csdn.net/u013514722/article/details/40921513

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!