• 顺序表操作集


    6-1 顺序表操作集

    本题要求实现顺序表的操作集。

    函数接口定义:

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

    其中List结构定义如下:

        typedef int Position;
        typedef struct LNode *List;
        struct LNode {
            ElementType Data[MAXSIZE];
            Position Last; /* 保存线性表中最后一个元素的位置 */
        };
    

    各个操作函数的定义为:

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

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

    bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;

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

    裁判测试程序样例:

        #include <stdio.h>
        #include <stdlib.h>
        
        #define MAXSIZE 5
        #define ERROR -1
        typedef enum {false, true} bool;
        typedef int ElementType;
        typedef int Position;
        typedef struct LNode *List;
        struct LNode {
            ElementType Data[MAXSIZE];
            Position Last; /* 保存线性表中最后一个元素的位置 */
        };
        
        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;
        
            L = MakeEmpty();
            scanf("%d", &N);
            while ( N-- ) {
                scanf("%d", &X);
                if ( Insert(L, X, 0)==false )
                    printf(" Insertion Error: %d is not in.
    ", X);
            }
            scanf("%d", &N);
            while ( N-- ) {
                scanf("%d", &X);
                P = Find(L, X);
                if ( P == ERROR )
                    printf("Finding Error: %d is not in.
    ", X);
                else
                    printf("%d is at position %d.
    ", X, P);
            }
            scanf("%d", &N);
            while ( N-- ) {
                scanf("%d", &P);
                if ( Delete(L, P)==false )
                    printf(" Deletion Error.
    ");
                if ( Insert(L, 0, P)==false )
                    printf(" Insertion Error: 0 is not in.
    ");
            }
            return 0;
        }
        
        /* 你的代码将被嵌在这里 */
    

    输入样例:

    6
    1 2 3 4 5 6
    3
    6 5 1
    2
    -1 6

    输出样例:

    <font  size="4">FULL Insertion Error: 6 is not in.
    Finding Error: 6 is not in.
    5 is at position 0.
    1 is at position 4.
    POSITION -1 EMPTY Deletion Error.
    FULL Insertion Error: 0 is not in.
    POSITION 6 EMPTY Deletion Error.
    FULL Insertion Error: 0 is not in.
    

    执行代码如下所示

        List MakeEmpty(){
            List p;
            p = (List)malloc(sizeof(struct LNode));
            p->Last = -1;
            return p;
        }
        Position Find( List L, ElementType X ){
            int i;
            for(i = 0; i <= L->Last; i++){
                if(X= =L->Data[i]){
                    return i;
                }
            }
            return ERROR;
        }
        bool Insert( List L, ElementType X, Position P ){
            if(L->Last==MAXSIZE-1){
                printf("FULL");
                return false;
            }
            if(P<0||P>L->Last+1){
                printf("ILLEGAL POSITION");
                return false;
            }
            int i;
            for(i = L->Last+1; i > P; i--){
                L->Data[i] = L->Data[i-1];
            }
            L->Data[i] = X;
            L->Last++;
            return true;
        }
        bool Delete( List L, Position P ){
            int i;
            if(P<0||P>L->Last){
                printf("POSITION %d EMPTY",P);
                return false;
            }
            for(i = P; i < L->Last; i++){
                L->Data[i] = L->Data[i+1];
            }
            L->Last--;
            return true;
        }
    
  • 相关阅读:
    SQL学习记录
    Python 函数和变量作用域
    Python 使用socket实现一对多通信
    Flask wtforms validate_on_submit() 无法返回值问题
    Flask WTForm BooleanField用法
    Python3 中的nonlocal用法
    Python 实现二进制循环效果
    Python 各种类型转换
    第一章:数据结构
    Python Challenge
  • 原文地址:https://www.cnblogs.com/hxz0618/p/11439754.html
Copyright © 2020-2023  润新知