本题要求实现顺序表元素的增、删、查找以及顺序表输出共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   -2typedef 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);elseprintf("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)
{//插入操作即把pos往后的元素都后延一位然后在pos位置插入e。
//首先length++,表从1开始,p指向表长度L.elem+L.length,q指向pos位置L.elem+pos.然后从表长pos走,只要不相等,p--。最后p即pos的位置,*p = e即可;if(pos <= 0 || pos > L.length + 1) return ERROR;L.length++;ElemType *p, *q;if(L.length >= L.listsize){L.elem = (ElemType *)realloc(L.elem, sizeof(int)*(L.listsize*100));if(!L.elem) exit(OVERFLOW);L.listsize += 20;}p = L.elem + L.length;q = L.elem + pos;while(p > q){*p = *(p - 1);p--;}*p = e;return OK;
}
Status ListDelete_Sq(SqList &L, int pos, ElemType &e)
{//删除即把pos即以后位置都前移一位。length--,p指向表长,q指向位置,只要pq不相等就q++;ElemType *p;ElemType *q;if(pos <= 0 || pos > L.length + 1) return ERROR;L.length--;p = L.elem + L.length;q = L.elem + pos;e = *q;while(p >= q){*q = *(q+1);q++;}return OK;
}
int ListLocate_Sq(SqList L, ElemType e)
{//查找,注意我写的代码,数组下标从一开始。for(int i = 1; i <= L.length; i++){int *p = L.elem + i;if(*p == e) return i;}return ERROR;
}void ListPrint_Sq(SqList L)
{for(int i = 1; i <= L.length-1; i++){printf("%d ",*(L.elem+i));}printf("%d\n",*(L.elem+L.length));
}

PTA顺序表基本操作相关推荐

  1. PTA 顺序表的基本操作

    原题有50分,这个答案有45分,欢迎指出不足 ;) 6-2 顺序表基本操作 (50 分) 实现顺序表的基本操作,如初始化.插入.删除.输出等. 注意:顺序表中可有重复元素值. 要求:写出三个基本操作函 ...

  2. PTA第一章作业1--数据结构基本概念 顺序表基本操作

    6-2 顺序表基本操作 (10分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...

  3. 【PTA】6-1 顺序表基本操作(10 分)

    题目来自 网络与信息安全-数据结构作业1-数据结构基本概念 6-1 https://fancyking.ml/archives/71 原题描述 6-1 顺序表基本操作(10 分) 本题要求实现顺序表元 ...

  4. 顺序表基本操作函数总结

    /*************************************************************************************/ /*   顺序表基本操作 ...

  5. 数据结构线性表的逻辑结构(三)顺序表基本操作的实现

    一. 实验目的 1. 掌握线性表的逻辑结构: 2. 顺序表基本操作的实现: 3. 掌握利用C/C++编程语言实现数据结构的编程方法: 4. 通过上机时间加强利用数据结构解决实际应用问题的能力: 二.  ...

  6. 顺序表基本操作<小白一听就懂!!!><超详细><接地气>

    顺序表基本操作<小白一听就懂!!!><超详细>&&<接地气> ***小编前言*** 完整代码 // 头文件 //主函数 // 初始化 /*运用指针* ...

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

    6-2 顺序表基本操作 (10 分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数. L是一个顺序表, 函数Status ListInsert_Sq(SqList &L ...

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

    6-2 顺序表基本操作 (10分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...

  9. 6-1 顺序表基本操作(10 分)

    6-1 顺序表基本操作(10 分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...

  10. 顺序表基本操作实现(详细)

    顺序表的目录 1.顺序表的概念 2. 熟悉顺序表的分类? 3.熟悉顺序表的优缺点 4.动态顺序表的基本操作 4.0包含头文件和结构体 4.1初始化,销毁,扩容 4.2尾插,尾删,头插,头删 4.3任意 ...

最新文章

  1. 如何使用Chrome开发者工具找到Marketing Cloud某个contact的guid
  2. 【论文笔记】One Millisecond Face Alignment with an Ensemble of Regression Trees
  3. 小米手机Linux Deploy安装Ubuntu
  4. Castle学习之一:安装与环境设置
  5. 2-Eighteenth Scrum Meeting-20151218
  6. Mysql主从复制配置
  7. 使用NPM和Nodejs编写编译工具
  8. burp proxy 过滤_burpsuite只拦截特定网站数据包教程
  9. 三菱mode bus tcp通讯_微服务中的异步消息通讯和事件驱动,你了解多少?
  10. 矩表 - 现代数据分析中必不可少的报表工具
  11. POJ 有关动态规划的题目
  12. SSD(Single Shot MultiBox Detector)不得不说的那些事
  13. dubbo注册服务IP解析异常及IP解析源码分析
  14. 蓝桥杯单片机01——74HC138与74HC573
  15. 【C++】洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树
  16. linux系统管理与服务器配置高志君_Linux系统管理与服务器配置
  17. NGINX-SESSION粘滞
  18. 服务器看门狗芯片电路图,SP706看门狗芯片SP706应用电路图.pdf
  19. et格式如何转换Excel
  20. 在bpfTrace中使用USDT

热门文章

  1. java 加入环境变量_JAVA添加环境变量
  2. 读书笔记 | 自动驾驶中的雷达信号处理(第1章 雷达系统基础)
  3. linux系统添加中文字体后不生效
  4. java 中的builder_Java设计中的Builder模式的介绍
  5. qqkey获取原理_编译原理(第3版)[刘铭][实验程序源代码]
  6. 免费翻译软件哪个好用
  7. 毛星云OpenCV3编程入门之python实现
  8. 常见的80道面试算法题
  9. ubuntu wps安装
  10. 基于SVP的格密码计算复杂性问题