线性表——顺序表(增删查改)

news2024/12/24 10:22:53

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存
储。在数组上完成数据的增删查改。

静态顺序表——使用定长数组储存数据

在这里插入图片描述
静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空
间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间
大小,

动态顺序表

在这里插入图片描述

动态顺序表的实现

多应用文件的形式写代码:text.c ——测试
seqlist,c ——函数实现
seqlist.h ——函数的声明

首先在头文件中创建一个动态顺序表的内存储存结构体

#include<stdio.h>
#include<stdlib.h> 

typedef int SLDataType;
typedef struct SeqList
{
	SLDataType* a;//指向动态开辟的数组
	int size;//记录有效数组个数
	int capicity;//记录空间大小
}SL;//重名名为SL

然后在text.c中的main函数中定义一个结构体变量s,

int main()
{
	SL s;

	
	SLInit(&s);//传址才能改变形参
	return 0;
}

然后再seqlist.c中实现顺序表的初始化

void SLInit(SL* p)
{
	p->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);//开辟4个空间
	if (p->a == NULL)
	{
		perror("malloc faild");
		exit(-1);
	}
	p->size = 0;
	p->capicity = 4;
}

在顺序表的末尾增加数据
在这里插入图片描述
主函数调用传参就可以增加了


int main()
{
	SL s;

	
	SLInit(&s);//传址才能改变形参
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 1);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);

	PRint(&s);
	SLDestroy(&s);
	return 0;
}
void SLPushBack(SL* p, SLDataType x)
{
	if (p->size == p->capicity)//如果相等就要增容
	{
		SLDataType* ps = (SLDataType*)realloc(p->a, p->capicity * 2 * (sizeof(SLDataType)));
		if (ps == NULL)
		{
			perror("realloc faild");
			exit(-1);
		}
		p->a = ps;
		p->capicity *= 2;

	}
	p->a[p->size] = x;
	p->size++;

}

void PRint(SL* p)
{
	for (int i = 0; i < p->size; i++)
	{
		printf("%d ", p->a[i]);
	}
	printf("\n");
}

在这里插入图片描述
在顺序表的末尾删除数据
——直接size–把末尾的有效数据删了,空间capicity不变,但是要注意不能越界,所以删除函数中还要写代码来检测是否删除越界了(szieof<0)

void SLPoBack(SL* p)
{
	//当size小于0后,就不删了
	//温柔的方法
	/*if (p->size == 0)
		return;*/
	//强制的方法——越界了就直接给报错
	assert(p->size > 0);

	p->size--;
}

在顺序表的头部插入数据
——整体数据向后挪动,给要插入的数据腾出首位置
因为这种方法也要考虑需不需要曾容的问题,所以直接把增容的代码也打包成一个函数封装使用

void SLPushFront(SL* p, SLDataType x)
{
	SLCheckCapacity(p);//判断增容函数
	//挪动数据
	int end = p->size - 1;
	while (end >= 0)
	{
		p->a[end+1] = p->a[end];
		end--;
	}//这样就实现了原有数据的整体向后挪动
	p->a[0] = x;//首位置增加数据
	p->size++;//有效数据+1
}

头部删除数据——直接用后面的数据覆盖
在这里插入图片描述

void SLPopFront(SL* p)
{
//当没有数据的时候如果还删的话就会出现越界报错
assert(p->size>0);
	//挪动数据
	int exit =1;
	while (exit<p->size)
		p->a[exit-1] = p->a[exit];
		++exit;
	}//这样就实现了原有数据的整体向后挪动
	p->size--;//有效数据+1
}

在pos位置插入x

在这里插入图片描述
代码:

void SLInsert(SL* p, int pos, SLDataType x)
{
	assert(pos >= 0 && pos <= p->size);
	SLCheckCapacity(p);//判断增容函数,因为如果pos=size那么就是在末尾增加数据,就要判断是否要增容
	int end = p->size - 1;
	while (end >= pos)
	{
		p->a[end + 1] = p->a[end];
		end--;
	}
	p->a[pos] = x;
	p->size++;
}

有了这个方法,那么我们在之前的头增尾增的代码就可以改成直接调用这个函数就行
在这里插入图片描述
在这里插入图片描述

删除pos位置的值

在这里插入图片描述
代码:

void SLErase(SL* p, int pos)
{
	assert(pos >= 0 && pos < p->size);
	int begin = pos + 1;
	while (begin < p->size)
	{
		p->a[begin - 1] = p->a[begin];
		begin++;
	}
	p->size--;
}

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

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

相关文章

【网络教程】如何实现Windows系统下的SSH服务端免密登录(Windows如何开启SSH)

文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,他只安装…

数据结构题型5-前插结点操作

#include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 100 #define ERROR 0 #define OK 1typedef struct LNode {Elemtype data;//数据域struct LNode* next;//指针域 }LNode, * LinkList;bool InitList(LinkList& L) …

【Vue】一文让你进入Vue的大门

Vue简介 官网 ● 英文官网 ● 中文官网 介绍与描述 Vue历史 Vue 是一套用来动态构建用户界面的渐进式JS框架 构建用户界面&#xff1a;把数据通过某种办法变成用户界面 渐进式&#xff1a;Vue可以自底向上逐层的应用&#xff0c;简单应用只需要一个轻量小巧的核心库&#xff0c…

性能、安全和稳定,袋鼠云数据服务平台 DataAPI 为企业 API 保驾护航

通过 API 对外提供数据服务是大部分企业中比较常见的数据应用方式&#xff0c;对于 API 平台管理者、开发者和调用者来说&#xff0c;API 的调用性能、安全性和稳定性是在平台选型时最需要考虑的三个因素。 袋鼠云API开发及管理平台【数栈-数据服务 DataAPI】通过多种手段标准…

nginx代理socket链接集群后,频繁断开重连

一、场景 nginx使用集群模式代理多个socket链接&#xff0c;socket链接频繁断开重连 二、具体表现如下 三、nginx代理配置 ## socket集群 upstream test_socket {server 192.168.1.233:9901;server 192.168.1.243:9901; }server {listen 8600;server_name localhost;l…

51单片机智能小车—PWM方式实现小车调速和转向

目录 1. 让小车动起来 2. 串口控制小车方向 3. 如何进行小车PWM调速 4. PWM方式实现小车转向 1. 让小车动起来 电机模块开发 L9110s概述 接通VCC&#xff0c;GND 模块电源指示灯亮&#xff0c; 以下资料来源官方&#xff0c;具体根据实际调试 IA1输入高电平&#xff0c…

小红书《乡村振兴战略下传统村落文化旅游设计》中南大博士许少辉八一新著

小红书《乡村振兴战略下传统村落文化旅游设计》中南大博士许少辉八一新著

使用伏格尔法解决运输问题

物流和供应链管理是当前管理研究的热点和前沿领域。供应链是一个由物流系统和该供应链中的所有单个组织或企业相关活动组成的网络。为满足供应链中顾客需求&#xff0c;需要对商品服务及相关信息&#xff0c;从产地到消费地高效率低成本地流动及储存进行规划、执行和控制。运筹…

基础秘钥、公钥、地址的熟悉指南

1. 地址 0基础漫画式阅读&#xff1a;https://www.cnblogs.com/charlesblc/p/6130433.html 清晰详细的地址生成解释&#xff1a;比特币&#xff1a;账户私钥、公钥、地址的生成 - kumata - 博客园 (cnblogs.com) 对原理更详细解释&#xff1a;区块链技术核心篇之二&#xff…

计算机竞赛 大数据房价预测分析与可视

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据房价预测分析与可视 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适合…

java复习-线程常用操作方法

线程常用操作方法 线程的主要方法都定义在 Thread类 之中&#xff0c;因此此处就是学习Thread中的方法。 一. 线程的命名与取得 构造方法&#xff1a;public Thread(Runnable target, String name)设置名字&#xff1a;public final synchronized void setName(String name)…

解决“您在 /var/spool/mail/root 中有新邮件”问题

一、发现问题 二、解决问题 1、删除邮件 cat /dev/null > /var/spool/mail/root 2、禁止系统启动邮件检查 echo "unset MAILCHECK" >> /etc/profile 三、解决结果

16G FC SFP+ SW光模块应用解析

随着云计算、大数据和物联网等技术的迅猛发展&#xff0c;数据传输速率不断提高。传统的铜缆传输面临带宽瓶颈和信号衰减等问题&#xff0c;而光纤传输凭借其高带宽、低损耗等优势成为了现代通信的主要选择。易天光通信的16G SFP SW 多模光模块作为高性能光纤传输设备&#xff…

SAP HANA 体系结构,LandScape,规模调整:完整教程

目录 一、SAP HANA 体系结构 二、SAP HANA 景观 三、SAP HANA 大小调整 SAP HANA 数据库是以主内存为中心的数据管理平台。 SAP HANA 数据库在 SUSE Linux Enterprises Server 上运行&#xff0c;并基于 C 语言构建。 SAP HANA 数据库可以分发到多台计算机。 SAP HANA 的优…

上海亚商投顾:三大指数小幅下跌 光刻机概念股午后走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日小幅调整&#xff0c;创业板指走势较弱。减肥药概念股继续大涨&#xff0c;常山药业2连板&#x…

CDH 集群离线部署、大数据组件安装与扩容详细步骤(cdh-6.3.1)

一、环境准备 1、服务器配置和角色规划 IP 地址主机名硬件配置操作系统安装步骤10.168.168.1cm-server8C16GCentos7新建10.168.168.2agent018C16GCentos7新建10.168.168.3agent028C16GCentos7新建10.168.168.4agent038C16GCentos7新建10.168.168.5agent048C16GCentos7扩容 2…

Harmonic Drive哈默纳科减速机旋转方向和减速比

Harmonic Drive哈默纳科减速机是一款广泛应用于工业生产中的机械设备&#xff0c;通过减速旋转运动来降低机器的转速和输出功率&#xff0c;从而实现精准的调节和控制。哈默纳科减速机的结构紧凑&#xff0c;体积小&#xff0c;重量轻&#xff0c;安装方便&#xff0c;维护简单…

深入了解 FastAPI 鉴权:掌握前后端身份验证的最佳实践

在构建现代化的 Web 应用程序时&#xff0c;用户身份验证和授权是不可或缺的组成部分。FastAPI 提供了多种方法来实现鉴权&#xff0c;以确保只有授权用户可以访问特定的资源或执行特定的操作。本文将介绍 FastAPI 中的鉴权方法&#xff0c;包括基本概念、实践案例和一些提示和…

企业如何转动自己的命运齿轮,实现数字化转型

企业进行数字化转型&#xff0c;需要熟悉数字化转型相关知识&#xff0c;了解众多前辈企业数字化转型成功或失败的案例&#xff0c;从中提炼出数字化转型的关键要点&#xff0c;在数字化转型的浪潮中&#xff0c;破浪前行。 数字化转型关键因素 1、数据 数据是数字化转型的基…