首页 > 其他分享 >数据结构--顺序表

数据结构--顺序表

时间:2024-12-28 10:58:10浏览次数:9  
标签:顺序 return -- ElemType int length SqList 数据结构

目录

一、顺序表的定义

二、顺序表的实现

1. 构建顺序表类以及准备内置函数

2. 顺序表的取值

3. 顺序表的查找

4. 顺序表的插入

5. 顺序表的删除

三、整合起来


一、顺序表的定义

        由n (n≥0) 个数据特性相同的元素构成的有限序列称为线性表,当 n=0 时被称为空表。

        而顺序表是线性表的其中一种: 用一组连续地址的存储单元一次存储线性表的数据元素(可类比数组)

注意:线性表的位序是从1开始的,而数组中元素的下标是从0开始的。

        基本操作:建立、存取、插入、删除、检索、分解、排序等。

二、顺序表的实现

1. 构建顺序表类以及准备内置函数

//构建顺序表类
class SqList
{
public:
	ElemType* elem;
	int length;
public:
	//析构函数初始化顺序表
	SqList()
	{
		elem = new ElemType[MAXSIZE];
		if(!elem)
			exit(OVERFLOW);
		length = 0;
	}
public:
	//顺序表的取值
	Status GetElem(SqList L, int i, ElemType& e);
	//顺序表的查找
	int LocateElem(SqList L, ElemType e);
	//顺序表的插入
	Status ListInsert(SqList& L, int i, ElemType e);
	//顺序表的删除
	Status ListDelete(SqList& L, int i);
};

2. 顺序表的取值

//顺序表的取值
Status SqList::GetElem(SqList L, int i, ElemType& e)
{
	if (i<1 || i>L.length)
		return false;
	e = L.elem[i - 1];
	return true;
}

3. 顺序表的查找

//顺序表的查找
int SqList::LocateElem(SqList L, ElemType e)
{
	for (int i = 0; i < L.length; i++)
		if (L.elem[i] == e)
			return i + 1;
	return 0;
}

4. 顺序表的插入

//顺序表的插入
Status SqList::ListInsert(SqList& L, int i, ElemType e)
{
	if ((i < 1) || (i > L.length + 1))
		return false;
	if (L.length == MAXSIZE)
		return false;
	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 true;
}

5. 顺序表的删除

Status SqList::ListDelete(SqList& L, int i)
{
	if ((i < 1) || (i > L.length))
		return false;
	for (int j = i; j <= L.length - 1; j++)
		L.elem[j - 1] = L.elem[j];
	L.length--;
	return false;
}

三、整合起来

#include<iostream>
using namespace std;

#define MAXSIZE 100
#define ElemType int
typedef bool Status;

//构建顺序表类
class SqList
{
public:
	ElemType* elem;
	int length;
public:
	//析构函数初始化顺序表
	SqList()
	{
		elem = new ElemType[MAXSIZE];
		if(!elem)
			exit(OVERFLOW);
		length = 0;
	}
public:
	//顺序表的取值
	Status GetElem(SqList L, int i, ElemType& e);
	//顺序表的查找
	int LocateElem(SqList L, ElemType e);
	//顺序表的插入
	Status ListInsert(SqList& L, int i, ElemType e);
	//顺序表的删除
	Status ListDelete(SqList& L, int i);
};

//顺序表的取值
Status SqList::GetElem(SqList L, int i, ElemType& e)
{
	if (i<1 || i>L.length)
		return false;
	e = L.elem[i - 1];
	return true;
}

//顺序表的查找
int SqList::LocateElem(SqList L, ElemType e)
{
	for (int i = 0; i < L.length; i++)
		if (L.elem[i] == e)
			return i + 1;
	return 0;
}

//顺序表的插入
Status SqList::ListInsert(SqList& L, int i, ElemType e)
{
	if ((i < 1) || (i > L.length + 1))
		return false;
	if (L.length == MAXSIZE)
		return false;
	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 true;
}

//顺序表的删除
Status SqList::ListDelete(SqList& L, int i)
{
	if ((i < 1) || (i > L.length))
		return false;
	for (int j = i; j <= L.length - 1; j++)
		L.elem[j - 1] = L.elem[j];
	L.length--;
	return false;
}

标签:顺序,return,--,ElemType,int,length,SqList,数据结构
From: https://blog.csdn.net/2401_84904048/article/details/144768324

相关文章

  • stm32边缘AI
    STM32边缘AI是指基于STM32微控制器(MCU)或微处理器(MPU)实现的边缘人工智能解决方案。以下是对STM32边缘AI的详细解析:一、概念与定义边缘人工智能,又称为“边缘计算”,是指在边缘侧使用人工智能算法和模型处理和分析数据,而不是将数据传输到中央服务器进行处理。STM32边缘AI则是利用......
  • 代码随想录算法训练营第六十天|Bellman_ford队列优化法(SPFA)、bellman_ford之判断负
    前言打卡代码随想录算法训练营第49期第六十天(づ◕‿◕)づ首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。Bellman_ford队......
  • C语言---猜数字游戏
    猜数字游戏代码#include<stdio.h>#include<time.h>#include<stdlib.h>voidmeun(){ printf("**********************\n"); printf("*******1.play*******\n"); printf("*******0.quit*******\n"); printf("......
  • 30岁了,想转行网安从头开始现实吗?
    为什么30岁转行网安是现实的?1.网络安全需求不断增长网络安全这一行业在过去几年中增长非常迅速,原因是互联网发展带来了巨大的数据和信息泄露风险。几乎所有的行业,尤其是金融、电商、医疗、政府等领域,都在面临严峻的网络安全挑战。无论是大公司还是中小企业,都......
  • 某220kV降压变电站电气部分初步设计
    摘要0关键词:变电所;主接线;变压器;继电保护0前言51设计内容及要求61.1设计的原始资料及依据6(1)概述6(2)所址地理及气象条件6(3)本设计中各级电压侧年最大负荷利用小时数为:6(6)系统情况6(7)设计内容61.2负荷统计61.2.1站用复合61.2.2110kV负荷6......
  • C语言-计算两个复数之积
    #include<stdio.h>//定义一个复数结构体structcomplex{intreal;//实部intimag;//虚部};//声明复数乘法函数structcomplexmultiply(structcomplexx,structcomplexy);intmain(){structcomplexproduct,x,y;//声明用于存储乘......
  • 《 C++ 点滴漫谈: 十三 》C++ 中的虚拟函数革命:virtual、override 和 final 如何改变你
    摘要这篇博客深入探讨了C++中virtual、override和final关键字的核心概念与使用技巧。我们从虚函数和多态的基本概念出发,讲解了如何通过virtual实现动态绑定,使程序能够在运行时根据对象类型调用适当的函数。接着,我们深入分析了override的使用,帮助开发者避免重写错......
  • Kubernetes快速部署(v1.31.4)
    文章目录1、初始化2、安装kubeadm3、单节点初始化4、集群网络环境搭建5、安装和配置calicoctl6、集群工作节点添加7、补充1、初始化将系统升级到最新,可以使用阿里源镜像站,本教程使用CentOS7系统(考虑大量用户使用的版本)yum-yupdate关闭selinux和防火墙system......
  • AI应用开发先了解这些概念:智能体、LLM、RAG、提示词工程
    什么是智能体(Agent)前排提示,文末有大模型AGI-CSDN独家资料包哦!一种基于LLM(LargeLanguageModel)的能够感知环境、做出决策并执行行动以实现特定目标的自主系统。与传统人工智能不同,AlAgent模仿人类行为模式解决问题,通过独立思考和调用工具逐步完成给定目标,实现自主操作......
  • 如何让人工智能使你的工作效率一日千里
    1.自动化重复性任务1.1识别并自动化日常任务提高工作效率的首要步骤是识别日常工作中重复性高且耗时的任务。根据麦肯锡全球研究院的报告,知识工作者大约有40%的时间花费在此类任务上。通过自动化这些任务,员工可以将更多时间投入到需要创造性思维和复杂决策的工作上。数......