zoukankan      html  css  js  c++  java
  • 单链表

     

    • 声明指向一个结构的指针并不创建该结构,而只是给出足够的空间容纳结构可能会使用的地址。
    • malloc(sizeof(PtrToNode))是合法的,但是它并不给结构体分配足够的空间。它只给指针分配一个空间。
    • Find 、 FindPrevious 、Delete 函数最坏情况运行时间是$O(N)$,其余的都为$O(1)$,因为不管表多大都只执行固定数目的指令。
    #include <cstdio>
    #include <cstdlib>
    #include <malloc.h>
    
    struct Node;
    typedef struct Node *PtrToNode;
    typedef PtrToNode List;
    typedef PtrToNode Position;
    typedef int ElementType;
    
    List MakeEmpty(List L);
    int IsEmpty(List L);
    int IsLast(Position P,List L);
    Position Find(ElementType X,List L);
    void Delete(ElementType X,List L);                  // 删除第一次出现的X元素 
    Position FindPrevious(ElementType X,List L);
    void Insert(ElementType X,List L,Position P);
    void DeleteList(List L);
    Position Header(List L);
    Position First(List L);
    Position Advance(Position P);
    ElementType Retrieve(Position P);
    
    struct Node
    {
        ElementType Element;
        Position Next;
    };
    
    int IsEmpty(List L)
    {
        return L->Next == NULL;
    }
    
    int IsLast(Position P,List L)
    {
        return P->Next == NULL;
    }
    
    Position Find(ElementType X,List L)
    {
        Position P = NULL;
        P = L->Next;
        while(P!=NULL && P->Element != X)
        {
            P=P->Next;
        }
        return P;
    }
    
    Position FindPrevious(ElementType X,List L)
    {
        Position P = L;
        while(P->Next!=NULL && P->Next->Element!=X)
        {
            P = P->Next;
        }
        return P;
    }
    
    void Delete(ElementType X,List L)
    {
        Position P = FindPrevious(X,L);
        if(!(IsLast(P,L)))
        {
            Position TmpCell = P->Next;
            P->Next = TmpCell -> Next;
            free(TmpCell);
        }
    }
    
    void Insert(ElementType Element,List L,Position P)
    {
        Position TmpCell = Position(malloc(sizeof(struct Node)));
        if(!TmpCell)
        {
            printf("Out of Space
    ");
        }
        TmpCell->Element = Element;
        TmpCell->Next = P->Next;
        P->Next = TmpCell;
    }
    
    void DeleteList(List L)
    {
        Position P = L->Next;
        L->Next = NULL;
        Position TmpCell;
        while(P!=NULL)
        {
            TmpCell = P;
            P = P->Next;
            free(TmpCell);
        }
    }
    
    List Create()
    {
        List L = List(malloc(sizeof(struct Node)));
        L->Next = NULL;
        Position PrePosition = L;
        for(int i = 1; i<=5;++i) { Insert(i,L,PrePosition); PrePosition = PrePosition -> Next;
        }
        return L;
    }
    
    void Print(List L)
    {
        Position P = L->Next;
        while(P!=NULL)
        {
            printf("%d",P->Element);
            P=P->Next;
            if(P!=NULL)
            {
                printf(" "); 
            }
        } 
        printf("
    ");
    }
     
     Position Header(List L)
    {
        return L;
    }
    
    Position First(List L)
    {
        return L->Next;
    }
    
    Position Advance(Position P)
    {
        return P->Next;
    }
    
    ElementType Retrist(Position P)
    {
        return P->Element;
    }
     
    int main()
    {
        List L = Create();   // Create()函数是作测试用 
        Print(L);
        return 0;
    }
  • 相关阅读:
    虚拟机网络模型详解,看这篇就够了(图文并茂)
    快速理解 VirtualBox 的四种网络连接方式
    Linux下桥接模式详解一
    CentOS7 下VNC Server远程桌面配置详解
    BAN如何下载?
    SNS交换机(OEM博科FC交换机)怎样设置密码策略
    SNS交换机(OEM博科FC交换机)的端口状态及排查流程说明
    SNS2124(OEM博科FC交换机)忘记密码,密码初始化
    博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)
    手淫让我付出了沉重的代价
  • 原文地址:https://www.cnblogs.com/kachunyippp/p/10255351.html
Copyright © 2011-2022 走看看