news 2026/4/26 11:34:56

顺序表的实现(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
顺序表的实现(2)

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct {
ElemType* elem; //存储空间的基地址
int length; //当前长度
} SqList;
Status InitList(SqList& L)
{
//构造一个空的顺序表L
L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
if (!L.elem)
exit(OVERFLOW); //存储分配失败退出
L.length = 0; //空表长度为0
return OK;
}
void DestroyList(SqList& L)
{
if (L.elem)
delete[]L.elem; //释放存储空间
}
int ListLength(SqList L)
{
return L.length;
}
bool ListEmpty(SqList L)
{
if (L.length == 0)
return true;
else
return false;
}
Status GetElem(SqList L, int i, ElemType& e) //用e返回L中第i个数据元素的值
{
if (i<1 || i>L.length) //顺序表的位置在1~L.length,那么不符合条件的范围就是
//i<1||i>L.length
return ERROR;
e = L.elem[i - 1]; //数组的第i-1个位置放的就是线性表第i个位置的元素
return OK;
}
int LocateElem(SqList L, ElemType e) //返回L中第1个值与e相同的元素在L中的位置,不存在返回0
{
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] == e)
return i + 1;
}
return 0;
}
Status ListInsert(SqList& L, int i, ElemType e) //在顺序表L中第i个位置插入新的元素e
{
if (i<1 || i>L.length + 1)
{
return ERROR;
}
if (L.length == MAXSIZE) {
return ERROR;
}
for (int j = L.length - 1; j >= i - 1; j--)
{
L.elem[j + 1] = L.elem[j];
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
Status ListDelete(SqList& L, int i) //在顺序表L中删除第i个元素
{
if (i<1 || i>L.length)
return ERROR;
for (int j = i; j <= L.length - 1; j++)
{
L.elem[j - 1] = L.elem[j];
}
--L.length;
return OK;
}
void ListPrint(SqList L)
{
for (int i = 0; i < L.length; i++)
cout << L.elem[i] << ((i == L.length - 1) ? '\n' : ' ');
}
int main()
{
int i;
ElemType e;
SqList L;
string op;
InitList(L);
while (cin >> op) {
if (op == "Empty")
cout << (ListEmpty(L) ? "Empty" : "Not empty") << endl;
else if (op == "Insert") {
cin >> i >> e;
if (ListInsert(L, i, e) == ERROR)
cout << "Insert failed" << endl;
else
ListPrint(L);
}
else if (op == "Length") {
cout << "List length is " << ListLength(L) << endl;
}
else if (op == "GetElem") {
cin >> i;
if (GetElem(L, i, e) == ERROR)
cout << "Out of index" << endl;
else
cout << "The elem at position " << i << " is " << e << endl;
}
else if (op == "LocateElem") {
cin >> e;
i = LocateElem(L, e);
if (i == 0)
cout << e << " is not found in list" << endl;
else
cout << e << " is found at the position " << i << endl;
}
else if (op == "Delete") {
cin >> i;
if (ListDelete(L, i) == ERROR)
cout << "Delete failed" << endl;
else
ListPrint(L);
}
}
DestroyList(L);
return 0;
}

//代码来源:湖南科技大学oj题目

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 22:58:24

Java结构化并发超时设置实战(超时控制权威指南)

第一章&#xff1a;Java结构化并发超时设置概述在现代Java应用开发中&#xff0c;结构化并发&#xff08;Structured Concurrency&#xff09;作为一种新兴的并发编程范式&#xff0c;旨在提升多线程代码的可读性、可维护性和错误处理能力。该模型通过将多个并发任务组织为一个…

作者头像 李华
网站建设 2026/4/23 19:05:09

epochs设置不当会导致什么后果?lora-scripts避坑指南

epochs设置不当会导致什么后果&#xff1f;lora-scripts避坑指南 在深度学习的微调实践中&#xff0c;一个看似不起眼的超参数往往能决定整个训练过程的成败。比如 epochs——这个数字背后&#xff0c;藏着模型是“学得刚好”还是“学过头”的关键平衡。 尤其是在使用 LoRA&…

作者头像 李华
网站建设 2026/4/23 13:28:36

STM32CubeMX安装步骤避坑指南:实战经验全面讲解

STM32CubeMX 安装不踩坑&#xff1a;从环境配置到固件管理的实战全解析 你有没有遇到过这样的情况&#xff1f; 下载完 STM32CubeMX&#xff0c;双击安装包却弹出“Java not found”&#xff1b;好不容易启动了软件&#xff0c;结果打开后提示“ No board available ”&…

作者头像 李华
网站建设 2026/4/24 10:28:21

JLink驱动下载官网核心要点:高效完成驱动安装

从官网下载 JLink 驱动&#xff1a;嵌入式开发的“第一公里”实战指南 在你点亮第一个 LED 之前&#xff0c;有一件事必须先搞定——让电脑认得你的调试器。 如果你正在用 ARM 架构做开发&#xff0c;那几乎绕不开 J-Link 。它是 SEGGER 出品的专业级调试探针&#xff0c;性…

作者头像 李华
网站建设 2026/4/23 7:31:19

vue+uniapp+Springboot宁波旅游微信小程序 功能全

文章目录 宁波旅游微信小程序功能摘要 主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 宁波旅游微信小程序功能摘要 该小程序基于Vue.jsUniappSpringBoot…

作者头像 李华
网站建设 2026/4/23 20:20:09

Java加解密性能下降50%?优化跨境支付数据加密的6个关键技术点

第一章&#xff1a;Java跨境支付数据加密概述在跨境支付系统中&#xff0c;数据安全是核心关注点。由于交易涉及多国网络传输、货币兑换与用户敏感信息&#xff08;如银行卡号、身份认证数据&#xff09;&#xff0c;必须通过高强度的加密机制保障数据的机密性、完整性和不可否…

作者头像 李华