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   -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

代码如下: 

void ListPrint_Sq(SqList L)
{for(int i = 0; i < L.length; i++){if(i==0)printf("%d", L.elem[i]);elseprintf(" %d", L.elem[i]);}
}int ListLocate_Sq(SqList L, ElemType e)
{int num = 0;int flag = 0;for(int i = 0; i < L.length; i++){if(L.elem[i] == e){flag = 1;num = i;break;}}if(flag == 1)return num+1;else return flag;
}
Status ListDelete_Sq(SqList &L, int pos, ElemType& e)
{if(pos < 1 || pos > L.length)return ERROR;else{e = L.elem[pos - 1];for(int i = pos - 1; i < L.length - 1; i++){L.elem[i] = L.elem[i + 1];}L.length --;return OK;}
}
Status ListInsert_Sq(SqList &L, int pos, ElemType e)
{if(pos >=1 && pos <=L.length + 1){ElemType *newbase;if(L.length >= L.listsize){newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(ElemType));if(!newbase)return ERROR;L.elem = newbase;L.listsize += LISTINCREMENT;}++L.length;for(int i = L.length - 1; i >= pos; i--){L.elem[i] = L.elem[i - 1];}L.elem[pos - 1] = e;return OK;}else return FALSE;
}

6-2 顺序表基本操作 (10分)相关推荐

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

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

  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. 6-1 顺序表基本操作(10 分)

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

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

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

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

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

  7. 7-2 打印九九口诀表 (10 分)

    7-2 打印九九口诀表 (10 分) 下面是一个完整的下三角九九口诀表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1 ...

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

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

  9. 实现顺序表的10个基本操作

    基础概念 顺序表是一种常见的线性表,线性表(linear list)是n个具有相同特性的数据元素的有限序列,是一种在实际中广泛使用的数据结构. 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线 ...

最新文章

  1. 如何在HHDI中进行数据质量探查并获取数据剖析报告
  2. 领航商务之选——金立M5 plus体验札记
  3. 学习计算机游戏编程,在线游戏学编程,游戏编程汇总
  4. 2.用Python套用Excel模板,一键完成原亮样式
  5. 从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
  6. 谈一下今天的网络赛。。。这次是真的弱爆了。。。。
  7. python标点符号全是英文吗_python 过滤中文、英文标点特殊符号
  8. python数据库def函数_Python:函数
  9. Android移动开发基础案例教程 第3章 Activity
  10. 从月收入8000元到15000元,你和LabVIEW编程高手的差距到底在哪?
  11. 计算机运行卡英语怎么说,处理电脑卡顿(国外英文资料).doc
  12. java解析JSON的方法汇总
  13. 微信公众号运营都有哪些渠道,来提升公众号的粉丝量
  14. HBuilderX 快捷键
  15. DDD(领域驱动设计)概述
  16. canal 源码解析(1)-启动篇(3)
  17. spring框架使用JavaMailSenderImpl发送邮件
  18. Python爬虫报错HTTPSConnectionPool(host=‘heat.qq.com‘, port=443)处理
  19. 【翻译论文】 Supervised Parametric Classification of Aerial LiDAR Data(2004)
  20. 【模电】0008 有源滤波器3(二阶有源高通、带通、带阻滤波器)

热门文章

  1. 3 判断是否为合法的URL
  2. UR5协作机器人实现了多台机床管理和焊接任务的自动化
  3. 分类指标ROC、AUC
  4. osgEarth要素贴地问题
  5. E2SRI: Learning to Super-Resolve Intensity Images from Events
  6. 《富爸爸穷爸爸》金句摘要
  7. 单片机怎样用汇编语言设计一个输出为6KHZ,占空比为45%的波形
  8. Java8中Stream的学习以及实际使用教程
  9. 最新ChatGPT网站源码运营版+支持ai绘画+GPT4.0
  10. Maven 多profile及指定编译问题