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

数据结构--顺序表

时间:2024-10-16 12:17:00浏览次数:8  
标签:顺序 return 线性表 -- int length 数据结构 data

简介:这是顺序表的数据结构以C/C++语言实现,编译器为VS2022,如有不对的地方欢迎大家在评论区里讨论

在其中我们要用到如下头文件:

#include"stdio.h"
#include"stdlib.h"

简单宏定义一些类型,宏定义的内容可以根据自身需求进行更换:

#define Maxsize 50		//静态顺序表的最大长度
#define ElemType int	//假定元素类型
#define InitSize 100		//表长度的初始定义

一、顺序表的定义和基本操作

1.1 线性表的定义

        线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表的长度。

1.2线性表的基本操作

        是线性表的核心,一些复杂的操作可以通过调用基本操作来实现,基本操作如下:

  1. InitList:初始化顺序表,构造空的线性表
  2. Length(L):求表长,返回线性表L的长度,即L的元素个数。
  3. LocateElem(L,e):按值查找操作。给定e值,在表中查找。
  4. GetElem(L,i):按为查找操作。获取表L中第i个位置的元素值。
  5. ListInsert(&,i,e):插入操作。在表L中第i个位置插入一个为e的元素。
  6. ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
  7. PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
  8. Empty(L):判空操作。若L为空表,则返回true,否则返回false。
  9. DestroyList(&L):销毁操作。销毁线性表,释放内存空间。

二、顺序表的顺序表示

2.1 顺序表的存储特点

        表中元素的逻辑顺序与其存储的物理顺序相同

2.2 顺序表的初始化       

         顺序表有两种存储分配方式,分别是静态分配存储和动态分配存储:

        静态分配存储:一次性划分内存,一旦空间满了再加入数据就会溢出,代码实现如下:

typedef struct {
	ElemType data[Maxsize];
	int length;

}SqList;
void InitList(SqList* L) {
	L->length = 0;
}

         动态分配存储,当存储空间占满,在程序执行中通过动态存储分配语句开辟并分配空间,代码实现如下:

typedef struct {
	ElemType* data;
	int MaxSize, length;
}SeqList;
void InitList(SeqList* L) {
	L->data = (ElemType*)malloc(InitSize * sizeof(ElemType));	//申请开辟的存储控件
	L->length = 0;	//长度初始化
	L->MaxSize = InitSize;	//最大长度初始化
}

2.3 顺序表的基本操作实现

//顺序表插入操作,在表L的第i(1<=i<=L.Length+1)个位置插入新元素e
bool 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; j >= i; j--) {	//将第i个元素后面的元素都后移
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;		//插入值
	L.length++;			//长度加1
	return true;
}
//顺序表删除操作
bool ListDelete(SqList& L, int i, ElemType& e) {
	if (i<1 || i>L.length) return false;	//判断i的范围是否有效
	e = L.data[i - 1];
	for (int j = 1; j < L.length; j++) {
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;
}
//按值查找(顺序查找)
int LocateElem(SqList L, ElemType e) {
	int i;
	for (i = 0; i < L.length; i++) {
		if (L.data[i] == e) {
			return i + 1;	//下标为i的元素值等于e,返回其位序i+1
		}		
	}
	return 0;		//退出循环,说明查找失败
}
//打印表L,打印成功返回true,打印失败返回false
bool PrintList(SqList &L) {
	if (L.length == 0) {
		return false;
	} 
	if (L.length >= Maxsize) {
		return false;
	}
	for (int i = 0; i <= L.length - 1; i++) {
		printf("%d ", L.data[i]);
	}
	return true;
}
//销毁线性表
bool DestroyList(SqList* L) {
	free(L);
	return true;
}

标签:顺序,return,线性表,--,int,length,数据结构,data
From: https://blog.csdn.net/2302_80045541/article/details/142977496

相关文章

  • DevEco Studio:Profile Manager功能
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • manim边做边学--数轴
    数轴是数学中的一个基本概念,它规定了原点、正方向和单位长度的直线。Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围、间隔和显示长度等参数,从而灵活地在动画中展示数学中的一维数值变化。下面将介绍Manim中的NumberLine对象的基本功能到使用示例......
  • Anything Anytime Library
    ASSIGNMENT2[40%]WhiteboxtestingandcodeanalysisOverviewForthisassignment,yourtaskistodesignanddocumentappropriatetestsforasoftwaresystemusingwhiteboxtechniques,buildaCI/CDpipelinetorunyourtests,andreportonthecodequa......
  • PyQt5 使用 Pyinstaller+multiprocessing 打包多进程应用时,引发的一些问题
    解决Pyinstaller打包PyQt5+multiprocessing多进程应用时,引发的一些问题,包括反复启动主进程,以及:AttributeError:'NoneType'objecthasnoattribute'write'本文提供一些解决方案,您可能需要根据自己的实际情况,逐个尝试,直到自己的multiprocessing多进程应用正常运行一、解决......
  • DevEco Studio:查看多端设备预览效果
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • aws waf 特定链接不能访问
    "GET/en/stores?page=185&country=US&sort=default&alpha=HTTP/1.1"200227757"-""Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:124.0)Gecko/20100101Firefox/124.0"翻页功能禁止使用:/stores?page=1/stores?page=2/stores?p......
  • 题解:[SNCPC2019] Pick Up
    ProblemLink[SNCPC2019]PickUp题意给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。Solution分类讨论。思考乙是否要去接甲。这个很简单,令\(ans1\)为甲自己出发耗时,\(ans2\)为乙接甲耗时,两者取最小值即可。\(ans1\)很好算,那么\(......
  • DevEco Studio:查看ArkUI预览效果
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • spring上 -基于注解配置bean,动态代理,AOP笔记
     用的是jdk8,spring框架里jar包的下载可以自己搜到注解用到的jar包。  60,注解配置Bean快速入门 基本介绍 代码结构: UserDao.javapackagecom.hspedu.spring.component;importorg.springframework.stereotype.Repository;/**使用@Repository标识该......
  • Proxmox VE 安装Mikrotik RouterOS
    一、环境介绍1、PVE版本:ProxmoxVirtualEnvironment7.2-32、ROSCHR镜像文件,GoogleChrome浏览器上访问Mikrotik官网下载,或访问云盘。3、WinSCP、Xshell用于上传镜像文件到PVE物理机。(请自行百度下载)    Xshell下载地址    WinSCP下载地址二、PVE部署准备工作......