• 单链表


    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElementType;
    
    struct SingleListNode
    {
        ElementType Element;
        struct SingleListNode *Next;
    };
    
    struct SingleListNode* SingleListInit()
    {
        struct SingleListNode* ListHead = malloc(sizeof(struct SingleListNode));
        ListHead -> Next = NULL;
        return ListHead;
    }
    
    int MakeSingleListEmpty(struct SingleListNode *ListHead)
    {
        struct SingleListNode *Pointer_1;
        struct SingleListNode *Pointer_2;
    
        if(ListHead != NULL)
        {
            Pointer_1 = ListHead;
            Pointer_2 = ListHead -> Next;
            while(Pointer_2 != NULL)
            {
                Pointer_1 = Pointer_2;
                Pointer_2 = Pointer_2 -> Next;
                free(Pointer_1);
            }
            ListHead -> Next = NULL;
        }
        else
        {
            return 1;
        }
        return 0;
    }
    
    int SingleListIsEmpty(struct SingleListNode *ListHead)
    {
        return (ListHead->Next == NULL);
    }
    
    int SingleListNodeIsLast(struct SingleListNode *PtrToNode,struct SingleListNode *ListHead)
    {
        return (PtrToNode -> Next == NULL);
    }
    
    struct SingleListNode* SingleListNodeFind(ElementType ToBeFind,struct SingleListNode *ListHead)
    {
        struct SingleListNode* Pointer;
    
        Pointer = ListHead -> Next;
        while(Pointer != NULL && Pointer -> Element != ToBeFind)
        {
            Pointer = Pointer -> Next;
        }
    
        return Pointer;
    }
    
    struct SingleListNode* SingleListNodeFindPrevious(ElementType ToBeFind,struct SingleListNode *ListHead)
    {
        struct SingleListNode* Pointer;
        
        Pointer = ListHead;
        while(Pointer -> Next != NULL && Pointer -> Next -> Element != ToBeFind)
        {
            Pointer = Pointer -> Next;
        }
        
        return Pointer;
    }
    
    int SingleListNodeDelete(ElementType ToBeDelete,struct SingleListNode *ListHead)
    {
        struct SingleListNode* Pointer;
        struct SingleListNode* TmpCell;
    
        Pointer = SingleListNodeFindPrevious(ToBeDelete,ListHead);
    
        if(!SingleListNodeIsLast(Pointer,ListHead))
        {
            TmpCell =  Pointer -> Next;
            Pointer -> Next = TmpCell -> Next;
            free(TmpCell);
            return 0;
        }
        return 1;
    }
    
    int SingleListNodeInsert(ElementType ToBeInsert,struct SingleListNode *ListHead,struct SingleListNode *PositionBeforeToBeInsert)
    {
        struct SingleListNode *TmpCell;
        
        TmpCell = malloc(sizeof(struct SingleListNode));
        
        if(TmpCell == NULL)
        {
            return 1; 
        } 
        
        TmpCell -> Element = ToBeInsert;
        TmpCell -> Next = PositionBeforeToBeInsert -> Next;
        PositionBeforeToBeInsert -> Next = TmpCell;
        
        return 0;
    }
    
    int SingleListNodeAdd(ElementType ToBeInsert,struct SingleListNode *ListHead)
    {
        struct SingleListNode *TmpCell;
        struct SingleListNode *LastNode;
        
        TmpCell = malloc(sizeof(struct SingleListNode));
        
        if(TmpCell == NULL)
        {
            return 1; 
        } 
        
        LastNode = ListHead;
        
        while(!SingleListNodeIsLast(LastNode,ListHead))
        {
            LastNode = LastNode -> Next;
        }
        
        TmpCell -> Element = ToBeInsert;
        TmpCell -> Next = LastNode -> Next;
        LastNode -> Next = TmpCell;
        
        return 0;
    }
    
    int SingleListDelete(struct SingleListNode *ListHead)
    {
        struct SingleListNode *Pointer;
        
        if(ListHead == NULL)
        {
            return 1;
        } 
        while(ListHead != NULL)
        {
            Pointer = ListHead;
            ListHead = ListHead -> Next;
            free(Pointer);
        }
        return 0;
    }
    int main()
    {
        struct SingleListNode *ListHead = SingleListInit();
        SingleListNodeAdd(1,ListHead);
        SingleListNodeAdd(2,ListHead);
        SingleListNodeInsert(3,ListHead,SingleListNodeFindPrevious(2,ListHead));
        SingleListNodeDelete(1,ListHead);
        SingleListNodeDelete(3,ListHead);
        printf("%d
    ",ListHead->Next->Element);
        MakeSingleListEmpty(ListHead);
        //printf("%d
    ",ListHead->Next->Element);
        SingleListDelete(ListHead);
        return 0;
    }
  • 相关阅读:
    创建新用户
    发生tcp丢包(拥堵、超时)重传
    centos7装机和初步运维
    论上山和下山哪个费力
    一、Linux简介
    服务器设置FTP
    自定义部署资源服务器
    代码管理工具 Git
    远程连接工具rdcman
    dubbo学习(八)dubbo项目搭建--消费者(服务消费者)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427377.html
Copyright © 2020-2023  润新知