zoukankan      html  css  js  c++  java
  • PTA 带头结点的链式表操作集

    6-2 带头结点的链式表操作集 (20 分)
     

    本题要求实现带头结点的链式表操作集。

    函数接口定义:

    List MakeEmpty(); 
    Position Find( List L, ElementType X );
    bool Insert( List L, ElementType X, Position P );
    bool Delete( List L, Position P );
    

    其中List结构定义如下:

    typedef struct LNode *PtrToLNode;
    struct LNode {
        ElementType Data;
        PtrToLNode Next;
    };
    typedef PtrToLNode Position;
    typedef PtrToLNode List;
    

    各个操作函数的定义为:

    List MakeEmpty():创建并返回一个空的线性表;

    Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;

    bool Insert( List L, ElementType X, Position P ):将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;

    bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define ERROR NULL
    typedef enum {false, true} bool;
    typedef int ElementType;
    typedef struct LNode *PtrToLNode;
    struct LNode {
        ElementType Data;
        PtrToLNode Next;
    };
    typedef PtrToLNode Position;
    typedef PtrToLNode List;
    
    List MakeEmpty(); 
    Position Find( List L, ElementType X );
    bool Insert( List L, ElementType X, Position P );
    bool Delete( List L, Position P );
    
    int main()
    {
        List L;
        ElementType X;
        Position P;
        int N;
        bool flag;
    
        L = MakeEmpty();
        scanf("%d", &N);
        while ( N-- ) {
            scanf("%d", &X);
            flag = Insert(L, X, L->Next);
            if ( flag==false ) printf("Wrong Answer
    ");
        }
        scanf("%d", &N);
        while ( N-- ) {
            scanf("%d", &X);
            P = Find(L, X);
            if ( P == ERROR )
                printf("Finding Error: %d is not in.
    ", X);
            else {
                flag = Delete(L, P);
                printf("%d is found and deleted.
    ", X);
                if ( flag==false )
                    printf("Wrong Answer.
    ");
            }
        }
        flag = Insert(L, X, NULL);
        if ( flag==false ) printf("Wrong Answer
    ");
        else
            printf("%d is inserted as the last element.
    ", X);
        P = (Position)malloc(sizeof(struct LNode));
        flag = Insert(L, X, P);
        if ( flag==true ) printf("Wrong Answer
    ");
        flag = Delete(L, P);
        if ( flag==true ) printf("Wrong Answer
    ");
        for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data);
        return 0;
    }
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    6
    12 2 4 87 10 2
    4
    2 12 87 5
    

    输出样例:

    2 is found and deleted.
    12 is found and deleted.
    87 is found and deleted.
    Finding Error: 5 is not in.
    5 is inserted as the last element.
    Wrong Position for Insertion
    Wrong Position for Deletion
    10 4 2 5 
    
     
     1 List MakeEmpty(){
     2     List l=(List)malloc(sizeof(struct LNode));
     3     l->Data=0;
     4     l->Next=NULL;
     5     return l;
     6 }
     7 
     8 Position Find( List L, ElementType X ){
     9     Position p=(Position)malloc(sizeof(Position));
    10     while(L){
    11         if(L->Data==X){
    12             p=L;
    13             return p;
    14         }
    15         L=L->Next;    
    16     }
    17     return ERROR;
    18 }//返回线性表中X的位置。若找不到则返回ERROR;
    19 
    20 bool Insert( List L, ElementType X, Position P ){
    21     
    22     Position n=(Position)malloc(sizeof(struct LNode));
    23     n->Data=X;
    24     
    25     while(L){
    26         if(L->Next==P){
    27             n->Next=P;
    28             L->Next=n;
    29             return true;
    30         }
    31         L=L->Next;
    32     }
    33 printf("Wrong Position for Insertion
    ");
    34         return false;
    35 }//将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;
    36 
    37 bool Delete( List L, Position P ){
    38     
    39     while(L){
    40         if(L->Next==P){
    41             L->Next=P->Next;
    42             return true;
    43         }
    44         L=L->Next;
    45     }
    46     printf("Wrong Position for Deletion
    ");
    47         return false;
    48 }//将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。
  • 相关阅读:
    [Zabbix5.0]Transaction check error: file /etc/my.cnf from install of Percona-Server-shared-56-5.6.48-rel88.0.1.el7.x86_64 conflicts with file from package mysql-community-server-5.7.30-1.el7.x86_64
    [CentOS7]Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
    [CentOS7]YUM只下载不安装
    [CentOS7]expect传参
    [CentOS7]查询FCSAN WWN
    [Docker]WARNING: IPv4 forwarding is disabled. Networking will not work.
    [Docker]CentOS8.2安装 Docker-compose
    [CentOS8]安装vmware tools
    [CentOS8]弹出CDROM
    书单
  • 原文地址:https://www.cnblogs.com/DirWang/p/11929772.html
Copyright © 2011-2022 走看看