PTA 数据结构 6-2 顺序表基本操作

2023-05-16

6-2 顺序表基本操作(10 分)

本题要求实现顺序表元素的增、删、查找以及顺序表输出共4个基本操作函数。L是一个顺序表,函数Status ListInsert_Sq(SqList &L, int pos, ElemType e)是在顺序表的pos位置插入一个元素e(pos应该从1开始),函数Status ListDelete_Sq(SqList &L, int pos, ElemType &e)是删除顺序表的pos位置的元素并用引用型参数e带回(pos应该从1开始),函数int ListLocate_Sq(SqList L, ElemType e)是查询元素e在顺序表的位次并返回(如有多个取第一个位置,返回的是位次,从1开始,不存在则返回0),函数void ListPrint_Sq(SqList L)是输出顺序表元素。实现时需考虑表满扩容的问题。

函数接口定义:

Status ListInsert_Sq(SqList &L, int pos, ElemType e);
Status ListDelete_Sq(SqList &L, int pos, ElemType &e);
int ListLocate_Sq(SqList L, ElemType e);
void ListPrint_Sq(SqList L);

其中 L 是顺序表。 pos 是位置; e 代表元素。当插入与删除操作中的pos参数非法时,函数返回ERROR,否则返回OK。

裁判测试程序样例:


//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>


//函数状态码定义
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int  Status;

//顺序表的存储结构定义
#define LIST_INIT_SIZE  100
#define LISTINCREMENT   10
typedef int ElemType;  //假设线性表中的元素均为整型
typedef struct{
    ElemType* elem;   //存储空间基地址
    int length;       //表中元素的个数
    int listsize;     //表容量大小
}SqList;    //顺序表类型定义
Status ListInsert_Sq(SqList &L, int pos, ElemType e);
Status ListDelete_Sq(SqList &L, int pos, ElemType &e);
int ListLocate_Sq(SqList L, ElemType e);
void ListPrint_Sq(SqList L);

//结构初始化与销毁操作
Status InitList_Sq(SqList &L){
  //初始化L为一个空的有序顺序表
    L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)exit(OVERFLOW);
    L.listsize=LIST_INIT_SIZE;
    L.length=0;
    return OK;
}


int main() {
    SqList L;

    if(InitList_Sq(L)!= OK) {
        printf("InitList_Sq: 初始化失败!!!\n");
        return -1;
    }

    for(int i = 1; i <= 10; ++ i)
        ListInsert_Sq(L, i, i);

    int operationNumber;  //操作次数
    scanf("%d", &operationNumber);

    while(operationNumber != 0) {
        int operationType;  //操作种类
        scanf("%d", & operationType);

        if(operationType == 1) {  //增加操作
            int pos, elem;
            scanf("%d%d", &pos, &elem);
            ListInsert_Sq(L, pos, elem);
        } else if(operationType == 2) {  //删除操作
             int pos; ElemType elem;
             scanf("%d", &pos);
             ListDelete_Sq(L, pos, elem);
             printf("%d\n", elem);
        } else if(operationType == 3) {  //查找定位操作
            ElemType elem;
            scanf("%d", &elem);
            int pos = ListLocate_Sq(L, elem);
            if(pos >= 1 && pos <= L.length)
                printf("%d\n", pos);
            else
                printf("NOT FIND!\n");
        } else if(operationType == 4) {  //输出操作
            ListPrint_Sq(L);
        }
       operationNumber--;
    }
    return 0;
}

/* 请在这里填写答案 */

输入格式: 第一行输入一个整数operationNumber,表示操作数,接下来operationNumber行,每行表示一个操作信息(含“操作种类编号 操作内容”)。 编号为1表示插入操作,后面两个参数表示插入的位置和插入的元素值 编号为2表示删除操作,后面一个参数表示删除的位置 编号为3表示查找操作,后面一个参数表示查找的值 编号为4表示顺序表输出操作 输出格式: 对于操作2,输出删除的元素的值 对于操作3,输出该元素的位置,如果不存在该元素,输出“NOT FOUND”; 对于操作4,顺序输出整个顺序表的元素,两个元素之间用空格隔开,最后一个元素后面没有空格。

输入样例:

4
1 1 11
2 2
3 3
4

输出样例:

1
3
11 2 3 4 5 6 7 8 9 10

//代码如下


Status ListInsert_Sq(SqList &L, int pos, ElemType e)
{
    for(int i=L.length;i>=pos;--i)
    {
        L.elem[i]=L.elem[i-1];
    }
    L.elem[pos-1]=e;
    L.length++;
    return 1;
}
Status ListDelete_Sq(SqList &L, int pos, ElemType &e)
{
    e=L.elem[pos-1];
    L.length--;
    for(int i=pos-1;i<L.length;i++)
    {
        L.elem[i]=L.elem[i+1];
    }
    return 1;
}
int ListLocate_Sq(SqList L, ElemType e)
{
    for(int i=0;i<L.length;i++)
    {
        if(L.elem[i]==e)
        {
            return i+1;
        }
    }
    return 0;
}
void ListPrint_Sq(SqList L)
{
    printf("%d",L.elem[0]);
    for(int i=1;i<L.length;i++)
    {
        printf(" %d",L.elem[i]);
    }
    printf("\n");
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PTA 数据结构 6-2 顺序表基本操作 的相关文章

随机推荐

  • linux下 有线和无线同时工作

    又要使用公司内网收邮件 xff0c 又要使用wifi上外网 为了这个问题 xff0c 百度了下 xff0c 都是抄来抄去的文章 xff0c 好烦 解决方法 xff0c 就是使用route命令 xff0c 修改静态路由表 方法 xff1a 1
  • MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part II)

    MySQL监控告警及可视化 xff1a Zabbix 43 Percona PMP实现 xff08 Part II xff09 PMP插件安装PMP监控脚本配置Web界面导入PMP模板 服务器清单如下 xff1a 服务器IP配置OS版本服务
  • 引用远程资源库中不存在的jar包,相关问题及解决方案

    问题背景 项目中需要用到远程资源库中不存在的jar包 xff0c 将jar包放在项目目录下 xff0c 并用 lt systemPath gt 的方式引用 xff0c windows系统本地调试的时候没问题 xff0c 部署到Linux能成
  • 彻底解决 error: Unable to find vcvarsall.bat

    1 windows上做Python开发 xff0c 搭环境还真不比Linux容易 error Unable to find vcvarsall bat这个错误眼熟吧 xff1f 凡是安装和操作系统底层密切相关的Python扩展 xff0c
  • ubuntu下解决微信不能发送图片的问题

    安装sudo apt install libjpeg62 i386 xff0c 可以解决ubuntu下不能发送微信截图的问题
  • dpkg安装deb缺少依赖包的解决方法--Ubuntu 16.04 LTS 安装网易云音乐

    一 去网易云音乐官网下载对应的安装包 我下载的是netease cloud music 1 0 0 2 amd64 ubuntu16 04 deb 二 开始安装 sudo dpkg span class hljs attribute i s
  • 个人号微信机器人API接口

    发送APP类消息 和发送小程序是同一个接口 xff0c 此接口可发送xml中包含appmsg的消息 xff0c 例如 xff1a 短视频 xff0c 直播 xff0c 音乐 xff0c 第三方APP等 请求URL xff1a http 域名
  • Fiddler抓包(下载安装及使用)

    一 下载安装 1 下载 官网链接 xff1a https www telerik com Fiddler Classic xff08 经典版 xff09 xff0c 这个版本是免费的 xff0c 不过只能在Windows上使用 Fiddle
  • URL&HTTP协议详解

    URL xff1a 统一资源定位符 这就意味着我们可以通过URL的方式去访问的资源 xff08 接口 xff09 URI xff1a 统一资源标识符 是一种抽象的概念 xff0c 本身没有具体去实现 一 URL URL是实现接口访问的第一步
  • CentOS7学习笔记(安装配置到常用命令)

    一 下载安装 访问linux org xff0c 选择centos xff0c 找到centos对应版本的镜像网站下载 新建虚拟机 安装 xff1a 语言默认英文 xff0c 最好不要改动 xff0c 不然有可能会有乱码问题 时区选择sha
  • Microsoft 365自定义安装,卸载Access、Publisher、Skype

    买电脑送的Office 2019只有Word Excel PowerPoint三件套 xff0c 一般情况都是够用的 xff0c 可以前往Microsoft 帐户 服务和订阅中下载一键安装 但是拥有Microsoft 365 xff08 原
  • Vimium如何使用

    Vimium是什么 vimium是一款支持全键盘操作浏览器的扩展 可以尽可能的解放鼠标 有一定的学习成本 xff0c 对本就拥有vim使用经验的人来说上手更容易 支持Chrome Edge Firefox 使用流畅后可以大大的提升浏览器的使
  • Linux 文件系统

    Linux 文件系统以及常见命令 Linux 文件系统block 与 inode文件类型权限目录树挂载 管道啥是管道管道的分类管道的实质 Linux 文件系统 在 Linux 中一切皆文件 xff0c 不仅仅是平时所使用的 txt pdf
  • 利用栈判断一个字符串是否为回文串

    include lt stdio h gt include lt string h gt 利用栈判断一个字符串是否为回文串 int main char a 101 s 101 int i len mid next top gets a 读入
  • Mysql 8.0 MGR部署限制和环境要求

    在mysql 8 0版本中 xff0c mgr功能进行了很大的改善和增强 xff0c 如果要部署组复制的服务器 xff0c 实例必须满足以下条件 xff1a 基础设置 xff1a 1 InnoDB存储引擎 disabled storage
  • ubuntu下安装vmware

    1 下载vmware xff0c https www vmware com cn products workstation pro workstation pro evaluation html 2 下载的vmware放到家目录下 3 ch
  • 使用devenv/MSBuild在命令行编译单个project

    一 使用devenv来build单个project devenv是VisualStudio的可执行程序 xff0c 一般安装在 C Program Files x86 Microsoft Visual Studio 10 0 Common7
  • 解决ROS常遇到的Couldn’t find executable named报错解决

    解决办法 xff1a 将执行文件打开权限允许作为程序执行文件
  • ubuntu下QtCreator启动无响应问题解决

    QtCreator正常使用 xff0c 系统重启后一打开就卡死 xff0c 无响应状态 xff0c 重装也没用 xff0c 查了半天才解决 解决方法 xff1a 删除系统配置目录下的QtProject文件夹 具体实施 xff1a 1 fin
  • PTA 数据结构 6-2 顺序表基本操作

    6 2 顺序表基本操作 xff08 10 分 xff09 本题要求实现顺序表元素的增 删 查找以及顺序表输出共4个基本操作函数 L是一个顺序表 xff0c 函数Status ListInsert Sq SqList amp L int po