zoukankan      html  css  js  c++  java
  • 单链表List的C实现

    头文件————————————————————————————————

    //单链表的实现
    #ifndef _LIST_H_
    #define _LIST_H_
    
    #include <stdlib.h>
    #define Element int
    struct node
    {
         Element data;
         struct node *next;
    };
    typedef struct node* PtrToNode;
    typedef PtrToNode Position;
    typedef Position List;
    List MakeEmpty(List L);
    int IsEmpty(List L);
    int IsLast(Position P, List L);
    List CreateEmptyList();
    Position Find(Element X, List L);
    void Delete(Element X, List L);
    Position FindPrevious(Element X, List L);//查找失败则返回链表的最后一个元素
    void Insert(Element X, Position P, List L);//在P的后面插入新元素X
    void PushBack(Element X, List L);
    void PushFront(Element X, List L);
    void DeleteList(List L);
    Position Header(List L);
    Position First(List L);
    Position Advance(Position P, List L);//得到P的前一个位置
    Element Retrieve(Position P);
    #endif
    

      

    源文件——————————————————————————————————
    //单链表的实现
    #include "./List.h"
    List MakeEmpty(List L)
    {
         if (NULL == L)
              return L;
         Position p = First(L);
         Position tmp = p;
         while(NULL != p)
         {
              tmp = p->next;
              free(p);
              p = tmp;
         }
         L->next = NULL;
         return L;
    }
    int IsEmpty(List L)
    {
         return First(L) == NULL;
    }
    int IsLast(Position P, List L)
    {
         return P->next == NULL;
    }
    List CreateEmptyList()
    {
         List L = (List)malloc(sizeof(struct node));
         if(NULL == L) return NULL;
         L->next = NULL;
         return L;
    }
    Position Find(Element X, List L)
    {
         if(NULL == L) return NULL;
         Position p = First(L);
         while(NULL != p && p->data != X)
              p = p->next;
         return p;
    }
    void Delete(Element X, List L)
    {
         if(NULL == L) return ;
         Position prev = FindPrevious(X, L);
         if(!IsLast(prev, L))
         {
              Position tmp = prev->next;
              prev->next = tmp->next;
              free(tmp);
         }
    }
    Position FindPrevious(Element X, List L)//查找失败则返回链表的最后一个元素
    {
         if(NULL == L) return NULL;
         Position prev = Header(L);
         while(NULL != prev->next && X != prev->next->data)
              prev = prev->next;
         return prev;
    }
    void Insert(Element X, Position P, List L)//在P的后面插入新元素X
    {
         if(NULL == L) return ;
         Position tmp = (Position)malloc(sizeof(struct node));
         if(NULL == tmp)     return ;
         tmp->data = X;
        tmp->next = P->next;
       P->next = tmp } void PushBack(Element X, List L) { if(NULL == L) return ; Position pos = Header(L); while(NULL != pos->next) pos = pos->next; Position tmp = (Position)malloc(sizeof(struct node)); if(NULL == tmp) return ; tmp->data = X; tmp->next = NULL; pos->next = tmp; } void PushFront(Element X, List L) { if(NULL == L) return ; Position pos = L->next; Position tmp = (Position)malloc(sizeof(struct node)); if(NULL == tmp) return ; tmp->data = X; tmp->next = pos; L->next = tmp; } void DeleteList(List L) { MakeEmpty(L); free(L); } Position Header(List L) { return L; } Position First(List L) { if(NULL == L) return NULL; return L->next; } Position Advance(Position P, List L)//得到P的前一个位置 { if(NULL == L) return NULL; Position prev = Header(L); while(NULL != prev && prev->next != P) prev = prev->next; return prev; } Element Retrieve(Position P) { return P->data; }

      

  • 相关阅读:
    Spring Boot集成Spring Security
    vue全局使用axios的方法
    在SpringBoot 使用Redis存储Session
    SpringBoot几种定时任务的实现方式
    mysql重置auto_increment字段
    iView中DatePicker的表单验证问题
    go语言基础(四)
    go语言基础(三)
    go语言基础(二)
    go语言基础(一)
  • 原文地址:https://www.cnblogs.com/zxh1210603696/p/3193033.html
Copyright © 2011-2022 走看看