• 链表的实现


    链表的类型声明

    #ifndef _LIST_H
    
    struct Node;
    typedef struct Node *PtrToNode;
    typedef PtrToNode List;
    tppedef PtrToNode Position;
    
    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);
    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);
    
    #endif 
    
    struct Node
    {
    	ElementType Element;
        Position Next;
    }
    

    测试一个链表是否为空

    #如果为空返回TRUE.
    int IsEmpty ( List L)
    {
    	return L->Next == NULL;
    }
    

    测试当前位置是否是链表的末尾

    #如果是链表的末尾,返回TRUE.
    	int IsLast( Position P, List L)
        {
        	return P->Next == NULL;
        }
    

    链表的查找

    Position Find (ElementType X,List L)
    {
    	Position P;
        P = L->Next;
        while(P != NULL && P->Element != X)
        	P = P->Next;
        return P;
    }
    

    链表的删除

    void Delete (ElementType X, List L)
    {
    	Position P,TmpCell;
        P = FindPrevious(X,L);
        if(!IsLast(P,L))
        {
        	TmpCell = P->Next;
            P->Next = TmpCell->Next;
            free(TmpCell);
        }
    }
    

    FindPrevious

    Position FindPrevious(ElementType X,List L)
    {
    	Position P;
        P=L;
        while(P->Next != NULL && P->Next->Element !=X)
        	P = P->Next;
        return P;
    }
    

    链表的插入

    void Insert(ElementType X,List L,Position P)
    {
    	Position TmpCell;
        TmpCell = malloc(sizeof(Struct Node));
        if(TmpCell == NULL)
        	FatalError("Out of space!!");
        TmpCell->Element = X;
        TmpCell->Next = P->Next;
        P->Next = TmpCell;
    }
    

    常见错误

    1.最常见的错误来自系统的错误信息而崩溃,比如“memory access violation"或”segmentation vialation"这种错误意味着有指针变量包含了伪地址,可能原因是初始化变量失败。
    2.第二种错误是何时使用或何时不使用malloc获取一个新的单元。
    备忘:声明指向一个结构的指针并不创建该结构,而只是给出足够的空间容纳结构可能会使用的地址,创建尚未声明过的记录的方法是使用malloc库函数,它使系统创建一个新的内存空间并返回指向该内存的指针。
  • 相关阅读:
    Ubuntu上使用Latex
    Ubuntu18.04 解压文件名乱码的解决方法
    Android 编译 opencv
    android 使用编译好的sdk
    https协议加密原理介绍(一)
    java 面试题目 class.forName和load的区别
    给进程设置环境变量
    Maven 编译jdk配置
    Docker积累
    潜谈单例模式
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6349295.html
Copyright © 2020-2023  润新知