顺序表:概念解析与C语言代码实现

用C语言实现一个顺序表(上) 用C语言实现一个顺序表 阅读详情

一、顺序表介绍

1.1 顺序表概念介绍

顺序表是线性表的一种。

物理结构逻辑结构
线性表不一定连续一定连续
顺序表连续连续

顺序表的底层是数组。那么,为什么要在数组的基础上,再引入顺序表这种数据结构呢?

我们知道,数组本身可以用来存放数据,并实现增、删、查、改等基本操作。但数组在使用时存在明显不足:

  • 数组不记录有效元素个数、总容量等信息;
  • 插入、删除、扩容等操作都需要手动编写代码实现,使用繁琐且容易出错。

而顺序表是对数组的一层封装:它在数组的基础上,增加了对有效元素长度、存储空间容量的管理,并提供了统一、封装好的增删查改接口,使用更简便、规范、安全。

1.2 顺序表分类

1、静态顺序表

静态顺序表的定义需要包含一个结构体,结构体包含两个成员:一个定长数组和一个整型数据(表示顺序表当前有效的数据个数)

struct SeqList
{
    int arr[100];
    int size;
}

2、动态顺序表

动态顺序表的定义也需要定义一个结构体,其中包含三个成员:一个数组指针,一个整型数据(表示有效的数据个数)和另一个整型数据(表示空间大小)。

struct SeqList
{
    int* arr;
    int size;
    int capacity;
}

如果使用静态顺序表,定长数组大小给小了,空间不够用(在公司里造成用户信息丢失是非常大的事故!!)数组大小给大了又会浪费空间。因此推荐使用动态顺序表。

二、代码实现

我们来实现一下动态顺序表。

我们创建三个文件:

SeqList.h写顺序表结构和声明顺序表的方法
SeqList.c写实现顺序表的方法
test.c进行测试
2.1 定义顺序表的结构

我们首先在SeqList.h中定义顺序表的结构

typedef int SLDataType;

typedef struct SeqList
{
	SLDataType* arr;
	int size;
	int capacity;
}SL;

我们将int类型重定义为SLDataType是为了如果以后将来想要用这个顺序表管理其他类型的数据,只需要进行一次修改,例如:

typedef char SLDataType;
2.2 顺序表初始化

接下来我们写一个方法用于顺序表的初始化(将数组指针置为空,有效数据个数、空间大小均为0):

//SeqList.c
void SLInit(SL* s)
{
	s->arr = NULL;
	s->size = s->capacity = 0;
}

【注意】顺序表初始化函数必须传入结构体指针,不能采用传值调用。原因是:函数参数传递时,编译器会将实参的内容逐字节拷贝到函数栈帧中。而顺序表结构体在未初始化之前,内部成员(如数据指针、长度、容量)均为无效值,此时直接传值会导致非法拷贝,程序运行时会报错:

2.3 顺序表销毁

顺序表用完之后,将数组占用的空间释放,将两个整型数据置为0。

void SLDestroy(SL* ps)
{
	if (ps->arr)
	{
		free(ps->arr);
	}
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}
2.3 插入
2.3.1 尾部插入

我们写一个方法来完成在顺序表尾部插入一个元素的功能。

首先插入之前要先判断顺序表当前的空间够不够用,如果不够要申请空间。

那么要申请多大的空间 / 一次增容增多大?

增容通常来说是成倍数地增加,一般是2或3倍。

原因如下:每次增容都要另外开辟一块更大的空间,并且把旧数据都拷贝到新的空间;所以频繁的增容意味着频繁的申请+拷贝+释放操作,会造成程序运行效率大大降低。

经过数学推理,每次扩容2-3倍最合理。

扩容的时候我们还要考虑capacity为0的情况。我们用一个三目表达式,如果capacity为0,我们就扩容4个字节。

void SLPushBack(SL* ps, SLDataType x)
{
	assert(ps);
	if (ps->capacity == ps->size)
	{
		//申请空间
		int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDataType* tmp = realloc(ps->arr, newCapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(1);
		}
		ps->arr = tmp;
		ps->capacity = newCapacity;
	}
	//ps->arr[ps->size] = x;
	//ps->size++;
	ps->arr[ps->size++] = x;
}

这段代码中,assert语句、将realloc返回值先赋给临时变量,确认其不为零后再赋给ps->arr,都是增强代码健壮性的操作。

2.3.2 头部插入

我们发现这里仍然需要判断顺序表里的空间够不够用,不够用要申请空间。所以不妨把这一段代码封装成一个函数:

void SLCheckCapacity(SL* ps)
{
	if (ps->capacity == ps->size)
	{
		//申请空间
		int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDataType* tmp = realloc(ps->arr, newCapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(1);
		}
		ps->arr = tmp;
		ps->capacity = newCapacity;
	}
}

然后,只需使用一个for循环来把顺序表中的元素向后移动一位,再把下标为零的元素赋值为需要插入的数据即可。

void SLPushFront(SL* ps, SLDataType x)
{
	assert(ps);
	SLCheckCapacity(ps);
	//先让顺序表中的元素整体向后挪一位
	for (int i = ps->size; i > 0; i--)
	{
		ps->arr[i] = ps->arr[i - 1];
	}
	ps->arr[0] = x;
	ps->size++;
}
2.4 删除
2.4.1 尾部删除

删数据之前要确保顺序表不为空。因为size这个成员就是用来管理顺序表中有效元素的个数,所以尾部删除只需size--即可。

void SLPopBack(SL* ps)
{
	assert(ps);
	assert(ps->size);
	ps->size--;
}
2.4.2 头部删除

只要将所有元素向前移动1位并让ps->size--即可。

void SLPopFront(SL* ps)
{
	assert(ps);
	assert(ps->size);
	for (int i = 1; i < ps->size; i++)
	{
		ps->arr[i - 1] = ps->arr[i];
	}
	ps->size--;
}
2.5 指定位置插入

画张示意图:

pos指的是指定位置的数组元素的下标。我们只需让pos及pos以后的数据向后移动一位,再把pos位置的数据改成我们想插入的数据即可:

插入之前,依旧要检查空间够不够,还要确定pos这个数据是大于等于0,小于等于size的。

void  SLErase(SL* ps, int pos)
{
	assert(ps);
	assert(ps->size);
	assert(pos >= 0 && pos < ps->size);
	for (int i = pos; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}

2.6 指定位置删除

画张示意图:

只要让pos之后的数据都向前移动一位,然后让size--即可。

void  SLErase(SL* ps, int pos)
{
	assert(ps);
	assert(pos >= 0 && pos < ps->size);
	for (int i = pos; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}
 2.6 顺序表的查找

遍历数组元素即可。

int SLFind(SL* ps, SLDataType x)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->arr[i] == x)
		{
			return i;
		}
	}
	return -1;
}

现在所有功能都实现完了。

void SLInit(SL* ps);
void SLDestroy(SL* ps);

void SLPushBack(SL* ps, SLDataType x);
void SLPushFront(SL* ps, SLDataType x);

void SLPopBack(SL* ps);
void SLPopFront(SL* ps);

void SLInsert(SL* ps, int pos, SLDataType x);

int SLFind(SL* ps, SLDataType x);

void SLPrint(SL s);

【注意】

  • 写完一个方法,测试一个,别等都写完了再测试,会崩溃。
  • 测试要测一般位置也要测特殊位置(开头,结尾)。
顺序表详解及其c语言代码实现 文章目录顺序表详解及其实现一 什么是顺序表二 顺序表的代码实现(注释详细)1. 顺序表的初始化2.顺序表的基本操作增(插入元素)删(删除元素)改(更改元素)查(查找元素)完整代码-输出效果 本人在写该文章过程中发现一个内容及其清晰地文章自己也很受益并把它推荐给你们: http://data.biancheng.net/view/157.html 因此本文章主要注重代码的实现并解析,以代码为基础进行顺序表的讲解.(注释写的挺详细的) 顺序表详解及其实现 一 什么是顺序表 线性表 (linear list): 阅读详情

相关推荐

C语言顺序表操作

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define MAX_SIZE 10 void create(struct link &amp;L); void show(struct link L); void getelem(struct link L,int n); void insert(struct link &amp;L,in...

qq_41481924的博客 2024

深入解析顺序表:揭开数据结构的奥秘,掌握顺序表的精髓

依次存储数据元素的线性结构,使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。这里我们实现动态顺序表,所以刚开始时我们可以假设给定顺序表的大小为 4(即能存放4个元素),不够就扩容,顺序表中刚开始是没有元素的。我们只需要将顺序表中pos位置到最后的数据依次往后挪动(从后往前挪),然后将pos下标位置的数据改为要插入的数据,最后。这个比较简单,我们只需要遍历一遍顺序表,查找相应数据,若找到,就返回下标,若没找到,就返回-1。

深入解析C/C++编程技巧,带你探索高效开发之路 3272

LBM模式学习·保姆级安装及初步使用教程

在学习LBM的过程中,我感觉可供参考的材料较为有限,对于一个独立学习LBM模式的初学者非常不友好(我就是这个初学者哈哈),因此萌生了写一篇保姆级的LBM模式教程,并将我踩过的坑一一指出,有助于后来者更快地上手该模式,而非半途而废。

weixin_42762673的博客 1万+

C语言实现顺序表(顺序存储结构)

顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种。通过《线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。 顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。 例如,使用顺序表存储集合{1,2,3,4,5}数据最终的...

BeiXi's Blog 5272

STM32CUBEIDE调试中HardFault_Handler崩溃的故障分析器实战解析

本文详细解析STM32CUBEIDE调试中HardFault_Handler崩溃问题的实战处理方法。通过内置故障分析器自动诊断硬件异常原因,如内存越界、堆栈溢出等,提供图形化界面简化调试流程,并分享配置步骤、典型案例及高级调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。

night的博客 643

AI大模型实战——模型测评:如何评估大模型的表现

大模型评测体系解析:从数据集到基准测试 本文系统梳理了大模型评测的关键要素。在数据集方面,重点介绍了C-Eval等中文评估套件,强调数据质量需通过人工验证保证。评测维度涵盖自然语言理解、知识推理、代码生成等核心能力。基准测试作为标准化评估方法,Glue、SuperClue等平台提供了公平比较的依据。文章指出厂商自评榜单存在水分问题,建议关注第三方评测。同时解析了少样本和零样本两种prompt模式的应用场景差异。最后解释了"SOTA"这一术语在描述模型最优性能时的应用价值。整体呈现了大模型

小志的博客 895

【数据结构】顺序表:与时俱进的结构解析与创新应用

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由哪部分构成,以什么方式构成,以及数据之间存在的相互关系。 | 数据结构 | 顺序表 |

Miracle_86的博客 4432

【生成数据集EXCEL文件】使用生成对抗网络GAN生成数据集:输出生成数据集EXCEL

生成器的任务是接收随机噪声向量作为输入,并尽可能生成与真实数据相似的样本,而判别器则是一个二分类器,旨在区分输入的样本是来自生成器生成的,还是来自真实数据。在训练过程中,生成器和判别器通过对抗学习的方式相互博弈,生成器的目标是生成足以欺骗判别器的样本,而判别器的目标则是尽可能准确地判断样本的真实性。GAN网络在多个领域展现了强大的能力,能够生成与训练数据分布相似的新数据,包括但不限于图像生成、图像风格转换、超分辨率、数据增强、视频生成、自然语言处理、医学图像处理以及游戏与虚拟现实等。

hustef的博客 1521

数据结构-顺序表基本操作的实现(含全部代码)

今天起开始编写数据结构中的各种数据结构及其算法的实现。 主要依据严蔚敏版数据结构教材以及王道数据结构考研辅导书。 今天是线性表中的顺序表的实现,主要实现函数如下,读者有需要可以评论,我可以适当加几个。 CreatList(SqList &L,int n) 参数:顺序表L,顺序表长度n 功能:创建长度为的顺序表 时间复杂度:O(n) InitList(SqList &...

关注网络安全、云原生安全 22万+

TwinCAT3入门教程3——PLC程序变量定义和硬件IO关联

目录 1、IO输入输出变量定义和硬件关联 1.1 IO输入 1.2 IO输出 1.3 PLC变量和IO模块关联 1.4 测试IO输出点 2、伺服变量关联 1、IO输入输出变量定义和硬件关联 1.1 IO输入 添加全局变量IO_Global 变量定义 (*==========================================IO输入===============================================================*)

panjinliang066333的博客 1万+

RK3588平台开发系列讲解(USB篇)UAC初识

📢本篇将介绍RK3588平台`UAC`的配置使用。

内核笔记 3880

复古 C 语言代码修复与解析 —— 以 49 顺序表操作.c 为例

作为C语言初学者,本次课程报告实践带来了多方面的能力提升:1. 语法与调试能力:掌握了老式C语言语法与现行标准的差异,能够精准定位并解决编译错误,如冗余函数删除、不兼容函数替换、函数定义规范等问题;2. 数据结构认知:深入理解了顺序表的存储结构与核心操作逻辑,明晰了元素插入、删除过程中元素移动的底层原理,为后续复杂数据结构的学习奠定基础;

neineikawaii的博客 1300

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

算法如诗的博客 1902

线性表-顺序表C语言实现

什么是线性表 线性表,全名为线性存储结构。使用线性表存储结构的方式可以理解,即“把所有的数据都用一根线串起来在存储到物理空间中”。 顺序存储结构和链式存储结构 将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构,(简称顺序表); 数据分散的存储在物理空间中,通过一根线保存他们之间的逻辑关系,这种存储结构称为链式存储结构;(简称链表); 前驱和后继 数据结构中,一组数据中的每个个体被称为“数据元素”(简称元素)。 某一元素的左侧相邻的元素称为“直接前驱”,位于此元素左侧所有的元素都称

weixin_42585296的博客 4215

微信小程序 - 完美解决“code“:“NO_AUTH“,“message“:“商户号该产品权限未开通,请前往商户平台>产品中心检查后重试“(微信小程序报错问题排查解决)

微信小程序NO_AUTH: 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试?微信小程序提示商户号该产品权限未开通,请前往商户平台>产品中心检查后重试,微信小程序"code":"NO_AUTH"错误码怎么解决,报错信息如下:httpResponseBody[{"code":"NO_AUTH","message":"商户号该产品权限未开通,请前往商户平台>产品中心检查后重试"}],微信小程序支付问题,如何解决这个问题,虚拟支付商户号,虚拟支付商户号里面没有产品支付的页面,排查商户号没问题,商户号配置

🏆 前端领域优质创作者 4444

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《C语言动态顺序表:从内存管理到功能实现》

C语言动态顺序表:从内存管理到功能实现

weixin_45136594的博客 1945

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

顺序表--C语言版(从0开始,超详细解析 ,小白一听就懂!!!)

⭕ 接口7:头删(SLPopFront) ⭕ 接口12:打印函数(SLPrint)以下就是我对数据结构---顺序表的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对数据结构-------单链表的理解,请持续关注我哦!!!!!

weixin_45031801的博客 8432

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

顺序表——C语言

本文深入解析顺序表的实现代码与核心原理。顺序表采用数组连续存储元素,包含capacity、last和data指针三个关键属性。代码实现分为初始化、插入(头插法)、扩容(2倍策略)、删除和销毁等核心操作,其中插入删除需移动元素,时间复杂度O(n)。测试展示了表满扩容机制,头插法导致元素逆序存储的特点。文章总结了顺序表随机访问优势与插入删除效率劣势,并探讨了不同扩容策略及内存管理要点,为数据结构学习奠定基础。

wy_yy047的博客 1216

古C语言游戏代码修复与解析——以49顺序表为例

报告基于数据结构课程中顺序表操作的实践任务,通过分析、调试和运行给定的C语言程序,深入理解了线性表的顺序存储结构及其核心算法。实践过程包括:分析顺序表的结构定义与内存管理方式,逐行解读插入和删除算法的实现逻辑与越界处理,并通过交互式测试验证了算法的正确性。 通过本次实践,掌握了顺序表插入与删除操作的时间复杂度分析,认识到算法中越界处理的重要性。在代码调试过程中提升了实际问题解决能力,为后续学习更复杂的数据结构奠定了坚实基础,熟练掌握了使用VSCode、Git等开发软件。为后续的工程项目开发奠定了一定

2401_83853483的博客 1032

链表:概念解析与C语言代码实现

本文详细介绍了单链表的概念和C语言代码实现。

dev_jin的博客 742

顺序表专题(C语言)

顺序表专题

日常分享C/C++相关的知识 1104

【初阶数据结构】深入解析顺序表:探索底层逻辑

本篇将深入解析顺序表:探索底层逻辑,理解底层是如何实现并了解该接口实现的优缺点,以便于我们在编写程序灵活地使用该数据结构。

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 4531

C 语言顺序表全面解析:从原理到实战

本文详细介绍了C语言动态顺序表的实现方法。顺序表作为线性表的一种存储结构,通过连续内存空间和数组实现,具有随机访问效率高(O(1))的特点。文章重点讲解了动态顺序表的结构设计(包含数据指针、长度和容量),并逐步实现了初始化、扩容、插入、删除、查找、修改、打印和销毁等核心操作。其中插入和删除操作需移动元素,时间复杂度为O(n),同时提供了完整测试代码验证功能。顺序表适用于查询频繁但插入删除较少的场景,但其扩容机制会带来一定性能开销。通过本文的学习,读者可以掌握顺序表的基本原理和实现方法,为后续数据结构学习奠定

ym_xixi的博客 1028

数据结构_顺序表(C语言)

目录顺序表的基本操作创建顺序表初始化顺序表销毁顺序表置空顺序表判断顺序表是否为空取顺序表第i个数据元素查找顺序表某数据位置将某数据插入顺序表删除顺序表中某数据遍历顺序表单链表 顺序表的基本操作 创建顺序表 初始化顺序表 销毁顺序表 置空顺序表 判断顺序表是否为空 取顺序表第i个数据元素 查找顺序表某数据位置 将某数据插入顺序表 删除顺序表中某数据 遍历顺序表 单链表 ...

小黯 2208

数据结构(c语言版)顺序表的实现

数据结构原本的书籍上面只写了算法部分,不能直接运行,在此贴上c语言实现的完整代码,需要注意的地方已在代码中注释 #include <stdio.h> #include <malloc.h> #define LIST_SIZE 100//初始分配空间的节点个数 #define LIST_INCREMENT 10//新分配空间的节点个数 typedef int ElemType; typedef struct book{ ElemType* elem;//存储空间基地址 int

ChunkWen的博客 1828

数据结构_线性表_顺序表(C语言实现+超详细逐步解析

数据结构,顺序表全部代码+超详细注释~

m0_73726899的博客 1717
上一篇: qsort函数的使用与模拟实现
下一篇: 基于顺序表实现通讯录项目
jinyishu_
博客等级 码龄1年 54粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值