SCAU 576 顺序线性表的基本操作

576 顺序线性表的基本操作

时间限制:1000MS 代码长度限制:10KB
提交次数:9027 通过次数:2456

题型: 编程题 语言: G++;GCC

Description

编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。本题目给出部分代码,请补全内容。


#include<stdio.h>
#include<malloc.h>
#define OK 1 
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType inttypedef struct
{int *elem;int length;int listsize;
}SqList;int InitList_Sq(SqList &L)
{
// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE
// 请补全代码}int Load_Sq(SqList &L)
{
// 输出顺序表中的所有元素int i;if(_________________________) printf("The List is empty!");  // 请填空else{printf("The List is: ");for(_________________________) printf("%d ",_________________________);  // 请填空}printf("\n");return OK;
}int ListInsert_Sq(SqList &L,int i,int e)
{
// 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e
// i的合法值为1≤i≤L.length +1
// 请补全代码}int ListDelete_Sq(SqList &L,int i, int &e)
{
// 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值
// i的合法值为1≤i≤L.length
// 请补全代码}int main()
{SqList T;int a, i;ElemType e, x;if(_________________________)    // 判断顺序表是否创建成功{printf("A Sequence List Has Created.\n");}while(1){printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");scanf("%d",&a);switch(a){case 1: scanf("%d%d",&i,&x);if(_________________________) printf("Insert Error!\n"); // 执行插入函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Inserted!\n", x); break;case 2: scanf("%d",&i);if(_________________________) printf("Delete Error!\n"); // 执行删除函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Deleted!\n", e);break;case 3: Load_Sq(T);break;case 0: return 1;}}
}

输入格式

测试样例格式说明:
根据菜单操作:
1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开
2、输入2,表示要实现删除操作,紧跟着要输入删除的位置
3、输入3,表示要输出顺序表的所有元素
4、输入0,表示程序结束

输入样例

1
1 2
1
1 3
2
1
3
0

输出样例

A Sequence List Has Created.
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 2 is Successfully Inserted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 3 is Successfully Inserted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 3 is Successfully Deleted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The List is: 2
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:

#include<stdio.h>
#include<malloc.h>
#define OK 1 
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
using namespace std;
typedef struct
{int* elem;int length;//数组长度int listsize;
}SqList;int InitList_Sq(SqList& L)
{// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE// 请补全代码// 分配内存空间给顺序表的元素数组,并将指针赋给 L.elemL.elem = (int*)malloc(sizeof(int) * LIST_INIT_SIZE);// 检查内存分配是否成功。如果 L.elem 为 NULL,意味着内存分配失败,返回 ERROR。if (!L.elem) return 0;// 将顺序表的长度初始化为 0,表示当前顺序表中没有元素。L.length = 0;// 将顺序表的容量初始化为 LIST_INIT_SIZE,表示当前顺序表的最大容量。L.listsize = LIST_INIT_SIZE;// 返回 OK,表示顺序表初始化成功。return 1;}int Load_Sq(SqList& L)
{// 输出顺序表中的所有元素int i;if (L.length==0) printf("The List is empty!");  // 请填空else{printf("The List is: ");for (i = 0; i < L.length; i++) printf("%d ",L.elem[i]);  // 请填空}printf("\n");return OK;
}int ListInsert_Sq(SqList& L, int i, int e)
{// 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e// i的合法值为1≤i≤L.length +1// 请补全代码// 检查插入位置 i 是否合法,即确保插入位置在合理范围内(1 到当前顺序表长度+1之间)。if (i<1 || i>L.length + 1) return 0;int* t = NULL;// 如果当前顺序表的长度已经达到了最大容量,则需要扩展顺序表的容量。if (L.length + 1 >= L.listsize) {// 使用 realloc 函数重新分配内存,扩展顺序表的容量。t = (int*)realloc(L.elem, sizeof(int) * (L.listsize + LISTINCREMENT));// 检查内存重新分配是否成功。如果 t 不为 NULL,则说明内存重新分配成功,更新 L.elem 指针指向新的内存空间。if (t)L.elem = t;else return 0;// 更新顺序表的容量为新分配内存空间的大小。L.listsize += LISTINCREMENT;}int j;// 将元素插入到顺序表中,需要移动插入位置之后的所有元素向后移动一位。for (j = L.length; j >= i; j--)L.elem[j] = L.elem[j - 1];// 将新元素 e 插入到位置 i 处。L.elem[i - 1] = e;// 更新顺序表的长度。L.length++;return 1;}int ListDelete_Sq(SqList& L, int i, int& e)
{// 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值// i的合法值为1≤i≤L.length// 请补全代码// 检查删除位置 i 是否合法,即确保删除位置在合理范围内(1 到当前顺序表长度之间)。if (i<1 || i>L.length)return 0;// 将要删除的元素值保存到变量 e 中。e = L.elem[i - 1];int j;// 从删除位置开始,将删除位置后面的元素向前移动一位,覆盖掉删除位置的元素。for (j = i - 1; j < L.length; j++)L.elem[j] = L.elem[j + 1];// 更新顺序表的长度,删除了一个元素,长度减一。L.length--;return 1;
}int main()
{SqList T;int a, i;ElemType e, x;if (InitList_Sq(T))    // 判断顺序表是否创建成功{printf("A Sequence List Has Created.\n");}while (1){printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");scanf("%d", &a);switch (a){case 1: scanf("%d%d", &i, &x);if (!ListInsert_Sq(T, i, x)) printf("Insert Error!\n"); // 执行插入函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Inserted!\n", x);break;case 2: scanf("%d", &i);if (!ListDelete_Sq(T, i, e)) printf("Delete Error!\n"); // 执行删除函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Deleted!\n", e);break;case 3: Load_Sq(T);break;case 0: return 1;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】详解线性表的各个函数接口+OJ习题讲解(画图比写代码更重要!!!)

文章目录 一、线性表二、顺序表1、什么是顺序表2、顺序表的分类 三、动态顺序表的实现1、结构的定义2、顺序表的初始化3、检查容量4、在头部插入数据5、在尾部插入数据6、在指定位置插入数据7、在尾部删除数据8、在头部删除数据9、删除指定位置的数据10、查找数据11、修改指定位…

Linux: cloud: network: tap tx 丢包一例,vCPU的运行受到主机CPU的占用影响

https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html/ovs-dpdk_end_to_end_troubleshooting_guide/high_packet_loss_in_the_tx_queue_of_the_instance_s_tap_interface 这个里面有一个丢包的例子是说&#xff0c;如果tx-queue的大小不够大&am…

ThreeJs制作模型图片

这个标题名字可能有歧义&#xff0c;只是不知道如何更好的表达&#xff0c;总之就是将图片的像素转换成3D场景的模型&#xff0c;并设置这个模型的颜色&#xff0c;放到像素点对应的位置从而拼接成一个图片&#xff0c;起因是上文中用js分解了音乐&#xff0c;实现了模型跳动效…

Oracle DBMS_LOCK

DBMS_lock是Oracle数据库中的一个包&#xff0c;主要用于控制并发和实现用户锁。在PL/SQL代码块中&#xff0c;有些操作代码块不能被多个会话同时进行执行&#xff0c;例如生成中间数据表等。如果此部分代码块被另个会话调用&#xff0c;则会造成中间数据表的数据在同一个会话中…

代码随想录算法训练营第七天|454. 四数相加 II

454. 四数相加 II 已解答 中等 相关标签 相关企业 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 …

互联网行业的应届大学生,如何制作高水平简历?

雇主通常只会花大约25秒的时间浏览一份简历,因此,拥有一份出色的简历对于找到理想工作至关重要。如果您的简历没有令人印象深刻的特点,那么如何才能在竞争激烈的求职市场中脱颖而出呢? 如果您不知道如何在简历上有效地展示自己,或者觉得简历无论怎么修改都不够突出,那么请…

安装、配置MySQL

安装相关软件 MySQL Server、MySQL Workbench MySQL Server&#xff1a;专门用来提供数据存储和服务的软件 MySQL Workbench&#xff1a;可视化的 MySQL 管理工具 官网安装 https://www.mysql.com/ 官网 MySQL :: Download MySQL Installer 安装包路径 在这里选择版本和和对应…

多图如何导入多个二维码?图片批量导出二维码的技巧

多个图片分别生成对应的二维码怎么做&#xff1f;现在扫码看图片是一种很常用的内容预览方式&#xff0c;有些产品包装也会采用这种方式来展示对应的信息&#xff0c;怎么简单快速的将图片生成二维码&#xff0c;相信有很多的小伙伴都非常的感兴趣。那么小编通过下面这篇文章来…

力扣-28. 找出字符串中第一个匹配项的下标(内置函数或双指针)

找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; …

分布式微服务 - 3.服务调用 - 1.概念

分布式微服务 - 3.服务调用 - 1.概念 项目示例&#xff1a; 无 内容提要&#xff1a; 服务调用、负载均衡、框架降级熔断限流、框架网关、框架 文档&#xff1a; 无 服务调用 服务调用时&#xff0c;需要先获取服务消费者的ip和端口号等信息。因此&#xff0c;一般服务…

常见的特殊端口号及其用途

21端口&#xff1a;FTP&#xff08;文件传输协议&#xff09;服务端口。FTP允许用户进行文件传输&#xff0c;如上传和下载文件。22端口&#xff1a;SSH&#xff08;安全外壳协议&#xff09;服务端口。SSH用于远程登录到服务器&#xff0c;并提供加密的数据传输。23端口&#…

探索C++中的动态数组:实现自己的Vector容器

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

Python 装饰器decorator 圣经

文章目录 普通装饰器decorator0. 万能公式&#xff0c;非常重要1. 便于入门的decorator原理2. 理解函数3. 装饰器的作用:4. 装饰器的语法糖5. 装饰器顺序6. 极简的装饰器7. 装饰器的参数无参 函数装饰器有参 函数装饰器 类装饰器class decorator0. 万能公式&#xff0c;非常重要…

判断一个整数是不是2的阶次方

boolean check(){int sum 50;boolean flag true;while(sum > 1){if (sum % 2 0){sum sum % 2;}else {flag false;break;}}return flag;}

uView ScrollList 横向滚动列表

该组件一般用于同时展示多个商品、分类的场景&#xff0c;也可以完成左右滑动的列表。 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基本使用 通过slot传入内容 <template><u-scroll-list><view v-for…

echarts line绘制机组开关状态折线图

2024.3.12今天我学习了如何用echarts line实现设备开关状态的效果。 代码如下&#xff1a; option {xAxis: {type: time,},yAxis: {type: value,splitNumber:2,// axisLine: {// show: true,// lineStyle: {// color:#808080// }// },axisLabel:{formatt…

管控员工上网行为(让老板管理更省心更高效)

很多老板都有这样一种顾虑&#xff1a; 员工到底有没有认真工作&#xff0c;工作是不是做到了全身心投入。 为什么会有担心员工工作状态的问题发生&#xff1f; 无疑是员工在上班时间浏览与工作无关的网站、下载私人文件、甚至是泄露公司机密等行为&#xff0c;让老板不放心了…

Elasticsearch:在本地使用 Gemma LLM 对私人数据进行问答

在本笔记本中&#xff0c;我们的目标是利用 Google 的 Gemma 模型开发 RAG 系统。 我们将使用 Elastic 的 ELSER 模型生成向量并将其存储在 Elasticsearch 中。 此外&#xff0c;我们将探索语义检索技术&#xff0c;并将最热门的搜索结果作为 Gemma 模型的上下文窗口呈现。 此外…

【Python】探索PyPinyin 库:Python 中的中文拼音转换工具

花未全开月未圆&#xff0c; 半山微醉尽余欢。 何须多虑盈亏事&#xff0c; 终是小满胜万全。 —— 《对抗路—吕布》 PyPinyin 是一个功能强大的 Python 库&#xff0c;用于将中文文本转换为拼音。它提供了丰富的功能&#xff0c;能够满足各种中文文本处理的需求。在本文中&am…

岭回归:优化预测的利器

在数据科学和机器学习的领域&#xff0c;构建准确、稳定的预测模型是一项至关重要的任务。岭回归作为一种强大的工具&#xff0c;被设计用来应对数据集中存在多重共线性的问题&#xff0c;并通过引入正则化来缩小预测误差。 1. 岭回归的原理&#xff1a; 岭回归是线性回归的一…