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

单链表

时间:2014-07-09 23:59:48      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   io   

表的实现:

  • 数组:可以用动态数组实现,但是,删除和插入的开销太大。
  • 链表:由内存中一系列不相连的结构连成;每个结构含有表元素和指向下一个结构的指针;

链表的实现:

       ps:为了方便删除和插入,我们设置一个头节点;

  • 节点:包含一个元素和指向下一个节点的指针;
    1 struct Node{
    2       int Element;
    3       struct Node *Next;
    4 }

     

  • 链表的置空:把链表的头节点的Next指向NULL
    1 List MakeEmpty(List L)
    2 {
    3      L->Next=NULL;
    4      return L;
    5 }

     

  • 测试链表是否为空
    int isEmpty(List L)
    {
       return L->Next == NULL;
    }

     

  • 查找:返回元素所在的位置;
    Position Find(ElementType x,List L)
    {
        Position p;
        p = L->Next;
        while(p!=NULL && p->ElementType !=x)
               p=p->Next;
        return p;
    }

     

  • 查找指定元素的前继元:
    Position FindPrevious(ElementType x,List L)
    {
        Position p;
        p = L;
        while(p->Next!=NULL && p->Next-Element !=x)
             p=p->Next;
        return p;
    }

     

  • 删除:删除元素之前要保存它的位置,使用FindPrevious()获取它的前继,如果获取的是最后一个则没找到此元素;

    void Delect(ElementType x,List L)
    {
       Position p,tmp;
       P = FindPrevious(x,L);
       if(!isLast(p,L))                  // 测试是否为最后一个
      {
           tmp = p->Next;
           p->Next = tmp->Next;
           free(tmp);
       }
    }

     

  • 插入:插入可以有多种设计,我们选择插入指定位置的后面。
    void Insert(ElementType x,Position p,List L)
    {
         Position tmp;
         tmp = (Position)malloc(sizeof(struct Node));
         if(tmp==NULL)
              printf("out of space!\n");
         else
             {
               tmp->Element = x;
               tmp->Next = p->Next;
               p->Next = tmp;
                
             }
        
    }

     

单链表,布布扣,bubuko.com

单链表

标签:style   blog   color   使用   os   io   

原文地址:http://www.cnblogs.com/avengervirus/p/3812535.html

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