• [PTA] 数据结构与算法题目集 6-4 链式表的按序号查找 & 6-5 链式表操作集 & 6-6 带头结点的链式表操作集


    带不带头结点的差别就是,在插入和删除操作中,不带头结点的链表需要考虑两种情况:1、插入(删除)在头结点。2、在其他位置。

    6.4

    //L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回ERROR。
    ElementType FindKth(List L, int K)
    {
        int i = 0;
        while (L != NULL)
        {
            if (i+1 == K)
                return L->Data;
            i++;
            L=L->Next;
        }
        return ERROR;
    }
    

    6.5

    //返回线性表中首次出现X的位置。若找不到则返回ERROR;
    Position Find(List L, ElementType X)
    {
        while (L != NULL)
        {
            if (L->Data == X)
                return L;
            L = L->Next;
        }
        return ERROR;
    }
    
    //将X插入在位置P指向的结点之前,返回链表的表头。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回ERROR;
    List Insert(List L, ElementType X, Position P)
    {
        List node = (List)malloc(sizeof(struct LNode));
        node->Data = X;
        node->Next = NULL;
        List q = L;
        if (P == L)
        {
            node->Next = q;
            return node;
        }
    
        while (q != NULL)
        {
            if (q->Next == P)
            {
                List temp=q->Next;
                q->Next = node;
                node->Next = temp;
                return L;
            }
            q=q->Next;
        }
        printf("Wrong Position for Insertion
    ");
        return ERROR;
    }
    
    //将位置P的元素删除并返回链表的表头。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回ERROR。
    List Delete(List L, Position P)
    {
        if (L == P)
        {
            L = L->Next;
            return L;
        }
    
        List q = L;
        while (q != NULL)
        {
            if(q->Next==P){
                List temp=q->Next->Next;
                q->Next=temp;
                return L;
            }
            q=q->Next;
        }
        printf("Wrong Position for Deletion
    ");
        return ERROR;
    }
    

    6.6

    //创建并返回一个空的线性表;
    List MakeEmpty()
    {
        List L = (List)malloc(sizeof(struct LNode));
        L->Data = NULL;
        L->Next = NULL;
        return L;
    }
    
    //返回线性表中首次出现X的位置。若找不到则返回ERROR;
    Position Find(List L, ElementType X)
    {
        L = L->Next;
        while (L != NULL)
        {
            if (L->Data == X)
                return L;
            L = L->Next;
        }
        return ERROR;
    }
    
    //将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;
    bool Insert(List L, ElementType X, Position P)
    {
        List node = (List)malloc(sizeof(struct LNode));
        node->Data = X;
        node->Next = NULL;
        List q = L;
    
        while (q != NULL)
        {
            if (q->Next == P)
            {
                List temp = q->Next;
                q->Next = node;
                node->Next = temp;
                return true;
            }
            q = q->Next;
        }
        printf("Wrong Position for Insertion
    ");
        return false;
    }
    
    //将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。
    bool Delete(List L, Position P)
    {
        List q = L;
        while (q != NULL)
        {
            if (q->Next == P)
            {
                List temp = q->Next->Next;
                q->Next = temp;
                return true;
            }
            q = q->Next;
        }
        printf("Wrong Position for Deletion
    ");
        return false;
    }
    
  • 相关阅读:
    Effective C++ 读书笔记(3544):继承关系与面向对象设计
    《全景探秘游戏设计艺术》读后感之引子
    Effective C++ 读书笔记(1117):构造析构和赋值函数
    Effective C++ 读书笔记(2934):类与函数之实现
    Unity中使用PersistentDataPath加载文件
    打开本地【C】【D】【E】驱动器时候提示 X:\ 找不到应用程序
    C#进制转换
    在VS里编辑unity代码调用系统方法不显示中文注释或英文注释
    Spreadsheet说明
    C#中删除控件的事件的方法类.
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9976259.html
Copyright © 2020-2023  润新知