6-2 顺序表基本操作 (10分)
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分)相关推荐
- 6-2 顺序表基本操作 (10 分)
6-2 顺序表基本操作 (10 分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数. L是一个顺序表, 函数Status ListInsert_Sq(SqList &L ...
- PTA第一章作业1--数据结构基本概念 顺序表基本操作
6-2 顺序表基本操作 (10分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...
- 【PTA】6-1 顺序表基本操作(10 分)
题目来自 网络与信息安全-数据结构作业1-数据结构基本概念 6-1 https://fancyking.ml/archives/71 原题描述 6-1 顺序表基本操作(10 分) 本题要求实现顺序表元 ...
- 6-1 顺序表基本操作(10 分)
6-1 顺序表基本操作(10 分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...
- 顺序表基本操作函数总结
/*************************************************************************************/ /* 顺序表基本操作 ...
- 数据结构线性表的逻辑结构(三)顺序表基本操作的实现
一. 实验目的 1. 掌握线性表的逻辑结构: 2. 顺序表基本操作的实现: 3. 掌握利用C/C++编程语言实现数据结构的编程方法: 4. 通过上机时间加强利用数据结构解决实际应用问题的能力: 二. ...
- 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 ...
- 顺序表基本操作<小白一听就懂!!!><超详细><接地气>
顺序表基本操作<小白一听就懂!!!><超详细>&&<接地气> ***小编前言*** 完整代码 // 头文件 //主函数 // 初始化 /*运用指针* ...
- 实现顺序表的10个基本操作
基础概念 顺序表是一种常见的线性表,线性表(linear list)是n个具有相同特性的数据元素的有限序列,是一种在实际中广泛使用的数据结构. 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线 ...
最新文章
- 如何在HHDI中进行数据质量探查并获取数据剖析报告
- 领航商务之选——金立M5 plus体验札记
- 学习计算机游戏编程,在线游戏学编程,游戏编程汇总
- 2.用Python套用Excel模板,一键完成原亮样式
- 从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
- 谈一下今天的网络赛。。。这次是真的弱爆了。。。。
- python标点符号全是英文吗_python 过滤中文、英文标点特殊符号
- python数据库def函数_Python:函数
- Android移动开发基础案例教程 第3章 Activity
- 从月收入8000元到15000元,你和LabVIEW编程高手的差距到底在哪?
- 计算机运行卡英语怎么说,处理电脑卡顿(国外英文资料).doc
- java解析JSON的方法汇总
- 微信公众号运营都有哪些渠道,来提升公众号的粉丝量
- HBuilderX 快捷键
- DDD(领域驱动设计)概述
- canal 源码解析(1)-启动篇(3)
- spring框架使用JavaMailSenderImpl发送邮件
- Python爬虫报错HTTPSConnectionPool(host=‘heat.qq.com‘, port=443)处理
- 【翻译论文】 Supervised Parametric Classification of Aerial LiDAR Data(2004)
- 【模电】0008 有源滤波器3(二阶有源高通、带通、带阻滤波器)