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

Accpeted Code

ElemType *address;
ElemType *a, *newbase;
Status ListInsert_Sq(SqList &L, int pos, ElemType e) {//取顺序表L的第pos个元素的值用e返回//pos的合法范围为 1<=pos<=L.length+1if((pos<1) || (pos>L.length+1)) return ERROR;if (L.length >= L.listsize) { //表格已满newbase = (ElemType *) realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));   //LISTINCREMENT是列表增量if (!newbase) return ERROR;L.elem = newbase;    //重新分配地址(新基址)L.listsize += LISTINCREMENT; //增加储存容量}address = &(L.elem[pos-1]); //表示插入位置for (a = &(L.elem[L.length - 1]); a >= address; a--)*(a + 1) = *(a);  //插入位置后的元素后移*address = e;L.length++;return OK;}
Status ListDelete_Sq(SqList &L, int pos, ElemType &e) {//取顺序表L的第pos个元素的值用e返回//pos的合法范围为 1<=pos<=L.lengthif ((pos < 1) || (pos > L.length)) return ERROR;address = &(L.elem[pos - 1]);e = *address;a = L.elem + L.length - 1;  //末尾元素的位置for (++address; address <= a; address++) {*(address - 1) = *address;}--L.length;return OK;
}int i = 0;
int ListLocate_Sq(SqList L, ElemType e) {i = 1;a = L.elem;while (i <= L.length && *a++ != e) {    //循环找到元素位置++i;}if (i <= L.length) {    //返回元素位置,没有返回0return i;} else {return 0;}}
void ListPrint_Sq(SqList L) {a = L.elem;for (i = 0; i < L.length; i++) {printf("%d", L.elem[i]);if (i != L.length - 1) {    //控制空格输出printf(" ");}}printf("\n");
}

Ps:仅供参考,请勿抄袭

PTA第一章作业1--数据结构基本概念 顺序表基本操作相关推荐

  1. 数据结构算法实现-顺序表基本操作

    数据结构算法实现 实现了高一凡的<<数据结构>>,书中的代码是基于VC6++ c++语言实现的,网上也可以找到TC版的c语言实现的源代码,TC版的源代码平台是 Turbo C ...

  2. 数据结构 稀疏矩阵三元组顺序表 基本操作

    [数据结构]稀疏矩阵 三元组顺序表存储 基本操作 1.稀疏矩阵定义: 假设在 mn 的矩阵中,又t个元素不为零.δ = t/mn ,称δ为矩阵的稀疏因子,通常定义δ小于等于0.05时称为稀疏矩阵. 2 ...

  3. 密码编码学与网络安全——原理与实践(第八版)——第一章:信息与网络安全概念

    密码编码学与网络安全--原理与实践(第八版) 第一章:信息与网络安全概念 1.1网络空间安全.信息安全和网络安全 1.2OSI安全架构 1.3安全攻击 1.4安全服务 1.5安全机制 1.6密码学 1 ...

  4. 粤教版高中信息技术必修一《数据与计算》第一章:python编程作ASCII编码excel表

    粤教版高中信息技术必修一<数据与计算>第一章 python编程作ASCII编码excel表 知识点: 1.循环语句 2.条件语句 3.格式化输出:format, f'{} 格式化  三个方 ...

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

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

  6. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  7. 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

    目录 前言 一.顺序表的定义 二.顺序表的初始化 三.顺序表的建立 四.顺序表的输出 五.顺序表的逆序输出 六.顺序表的插入操作 七.顺序表的删除操作 八.顺序表的按位和按值查找 基本操作的完整代码 ...

  8. C语言-数据结构-可变长顺序表的查找操作

    [问题描述] 实现可变长顺序表的查找算法.任务要求:通过顺序表的初始化.插入建立顺序表,根据查找要求,返回查找结果. [输入形式] 第一行输入整数N(1<=N<=100),M(1<= ...

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

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

最新文章

  1. commons-collections使用介绍之Bag HashBag
  2. python基础教程:类和对象
  3. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
  4. java和网易我的世界有什么区别_网易我的世界手机版对比正版JAVA版我的世界有什么区别?...
  5. php 中断输出,PHP捕捉异常中断的方法
  6. Vue.use自定义自己的全局组件
  7. mysql 5.7 安装_MySQL 5.7 的安装历程
  8. 2021牛客寒假算法基础集训营1,签到题ABFIJ
  9. 继承与data member之虚拟继承
  10. 这届打工人,回家过年都这么难
  11. 推荐一款免费开源的pdf编辑器
  12. qqkey获取原理_征途手机版电脑版安装使用教程【安卓+ios电脑版图文攻略】
  13. java星号心形代码_用符号拼一个完整的大爱心 它起源于中国的甲骨文的心字
  14. php课程设计感想,设计心得体会
  15. 图片生成二维码最好的工具
  16. Java 生成舒尔特方格
  17. 微信小程序旋转动画,图片转动view旋转等
  18. c语言编写步进电机步数程序6,单片机步进电机程序问题
  19. processing制作动态山水背景
  20. python 计算牛顿差商,计算并化简牛顿插值多项式

热门文章

  1. GIF’ted 1.3 GIF动画制作工具
  2. 如何用css写回到顶部,css3 回到顶部书写
  3. 光滑噪声数据常用的方法_如何处理噪声数据
  4. Mini-KMS_Activator激活office2010使用教程
  5. Java项目:SSM图书馆图书管理借阅书籍管理系统
  6. 中国采购招标网爬虫采集破解!你学会了吗?
  7. PHP字符串长度不一致的处理方法
  8. 【更新公告】Airtest更新至1.2.4
  9. Android 下实现APK加密功能
  10. XXOO 传说90黑阔论坛