[数据结构]程杰《大话数据结构》书中的顺序表源码

数据结构与算法学习笔记 之 程杰《大话数据结构》数据结构篇 数据结构与算法学习笔记 之 程杰《大话数据结构》 第一章 数据结构绪论 数据项:数据不可分割的最小单位。在数据结构课程中,把数据项定义为最小单位,有助于我们更好地解决问题。但是真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。 数据对象:是性质相同的数据元素的集合,是数据的子集。其中,性质相同是指数据元素具有相同数量和类型的数据项。 结构:各个组成部分相互搭配和排列的方式。 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作 阅读详情
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20   //存储空间初始分配量
typedef int Status; //函数的类型
typedef int ElemType;//顺序表中元素的类型
typedef struct { //顺序表结构体
	ElemType data[MAXSIZE];//存储数据元素的数组
	int length; //线性表当前长度
} SqList;

/*学习心得:
 *是直接访问运算符
 &是取地址运算符
 *&a与*(&a)等价,因为运算顺序一样,都是先取地址然后对地址进行访问。
 所以*&a与*(&a)实际上都表示a
 例如在当写函数体的时候,
 函数头是这样的:
 Status InitList(SqList *L)
 而在调用时,是这么使用的:
 SqList L;
 InitList(&L);
 函数体中传入的东西实际上是L
 */

//初始化线性表
Status InitList(SqList *L) {
	L->length = 0; //使表长为0
	return OK;
}

/*
 ->远算符是什么意思?
 成员选择(指针),选择结构体的成员变量
 用法:对象指针->成员名
 如:L->length
 */

//增,插入元素
Status ListInsert(SqList *L, int i, ElemType e) {
	int k;
	if (L->length == MAXSIZE) //错误发生在表的身上,如果表长已经达到最大值
		return ERROR;
	if (i < 1 || i > L->length + 1) //错误发生在插入位置的身上,如果插入位置<1或>表长+1
		return ERROR;
	if (i <= L->length) { //插入位置合理,如果插入位置i<=表长
		for (k = L->length; k >= i - 1; k--) //该for循环把i后面的元素都往后挪一位
			L->data[k + 1] = L->data[k];
	}
	L->data[i - 1] = e; //把元素e插入第i-1个位置
	L->length++; //表长+1
	return OK;
}

//删,删除第i个位置的元素e(和插入元素有微妙的区别)
Status ListDelete(SqList *L, int i, ElemType *e) {
	int k;
	if (L->length == 0) //错误发生在表的身上,如果表长为0
		return ERROR;
	if (i < 1 || i > L->length) //错误发生在输入数的身上,如果插入位置<1或>表长(注意这边是L->length,而不是L->length+1)
		return ERROR;
	*e = L->data[i - 1]; //数组的下标从0开始,所以data数组的第i个元素的下标是i-1
	if (i < L->length) { //注意这边是<而不是<=
		for (k = L->length; k >= i - 1; k--)
			L->data[k - 1] = L->data[k];//往前挪
	}
	L->length--;
	return OK;
}

//查,返回线性表中第i个元素的值e
Status GetElem(SqList L, int i, ElemType *e) {
	if (L.length == 0 || i < 1 || i > L.length)//如果线性表长为0或输入的数小于1或大于线性表表长
		return ERROR;
	*e = L.data[i];
	return OK;
}

//改,修改线性表的第i个元素为e
Status UpdateElem(SqList *L, int i, ElemType new) {
	if (L->length == 0 || i < 1 || i > L->length)//该条件与“查”函数的条件一致
		return ERROR;
	L->data[i] = new;//为第i个元素赋new的值
	return OK;
}

//打印某个元素
Status visit(ElemType c) {
	printf("%d", c);
	return OK;
}

//遍历顺序表
//该方法不需要对顺序表进行修改,所以不采用指针型的形式参数。
Status ListTraverse(SqList L) {
	int i;
	for (i = 0; i < L.length; i++)
		visit(L.data[i]);
	printf("\n");
	return OK;
}

//判断顺序表是否为空
Status ListEmpty(SqList L) {
	if (L.length == 0)
		return TRUE;
	else
		return FALSE;
}

//将线性表置为空表
Status ClearList(SqList *L) {
	L->length = 0;
	return OK;
}

//返回线性表中数据元素个数
Status ListLength(SqList L) {
	return L.length;
}

//返回线性表中第一个与e满足相等关系的元素的位序
Status LocateElem(SqList L, ElemType e) {
	int i;
	if (L.length == 0)
		return 0;
	for (i = 0; i < L.length; i++) { //从前往后找
		if (L.data[i] == e)
			break;
	}
	if (i >= L.length) //如果序号大于或等于表长
		return 0;
	return i + 1;
}

//合并顺序表
void unionL(SqList *La, SqList Lb) {
	int La_len, Lb_len, i;
	ElemType e;
	La_len = ListLength(*La);
	Lb_len = ListLength(Lb);
	for (i = 1; i <= Lb_len; i++) {
		GetElem(Lb, i, &e);
		if (!LocateElem(*La, e))
			ListInsert(La, ++La_len, e);
	}
}
int main() {
	SqList L;
	ElemType e;
	Status i;
	int j, k;
	i = InitList(&L);
	printf("初始化后,L.length=%d\n", L.length);
	for (j = 1; j <= 5; j++)
		i = ListInsert(&L, 1, j);
	printf("在线性表表头插入1-5后,L.data=");
	ListTraverse(L);
	printf("目前,L.length=%d\n", L.length);
	i = ListEmpty(L);
	printf("L是否为空,i=%d(1:yes,0:no)\n", i);
	i = ClearList(&L);
	printf("清空后,L.length=%d\n", L.length);
	i = ListEmpty(L);
	printf("L是否为空,i=%d(1:yes,0:no)\n", i);
	for (j = 1; j <= 10; j++)
		i = ListInsert(&L, 1, j);
	printf("在线性表表头插入1-10后,L.data=");
	ListTraverse(L);
	printf("目前,L.length=%d\n", L.length);
	ListInsert(&L, 1, 0);
	printf("在表头插入0后,L.data=");
	ListTraverse(L);
	printf("L.length=%d\n", L.length);
	GetElem(L, 5, &e);
	printf("第五个元素为%d\n", e);
	for (j = 3; j <= 4; j++) {//找到值为3-4的元素
		k = LocateElem(L, j);
		if (k)
			printf("第%d个元素的值为%d\n", k, j);
		else
			printf("没有值为%d的元素", j);
	}
	k = ListLength(L);
	for (j = k + 1; j >= k; j--) {//尝试删除第k+1号元素以及第k号元素
		i = ListDelete(&L, j, &e);
		if (i == ERROR)
			printf("删除第%d个数据失败\n", j);
		else
			printf("删除的第%d个元素为%d\n", j, e);
	}
	printf("依次输出L的元素");
	ListTraverse(L);
	//构造一个有10个数的Lb
	SqList Lb;
	i = InitList(&Lb);
	for (j = 6; j < 15; j++)
		i = ListInsert(&Lb, 1, j);
	printf("依次输出Lb的元素");
	ListTraverse(Lb);

	unionL(&L, Lb);
	printf("依次合并后的顺序表");
	ListTraverse(L);
	printf("修改第四个元素为1000\n");
	UpdateElem(&L, 3, 1000);
	printf("顺序表变成");
	ListTraverse(L);
	return 0;
}

Unet++改进33:添加ConvolutionalGLU(2024最新改进方法)|紧凑的网络结构和高效的运算 由于残差连接的深度退化效应,许多依赖堆叠层进行信息交换的高效视觉变形模型往往不能形成足够的信息混合,导致视觉感知不自然。为了解决这个问题,在本文中,我们提出了聚合注意力,这是一种基于仿生设计的令牌混合器,它模拟生物中央凹视觉和连续眼运动,同时使特征映射上的每个令牌具有全局感知。此外,我们结合了可学习的令牌,与传统的查询和键交互,这进一步多样化了亲和矩阵的生成,而不仅仅依赖于查询和键之间的相似性。我们的方法不依赖于堆叠进行信息交换,从而有效地避免了深度退化,实现了自然的视觉感知。 阅读详情

相关推荐

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

数据结构之大话数据结构

大话数据结构阅读笔记

HAH--M的博客 5359

如何在项目中集成bpmn-process-designer

文章目录一、bpmn-process-designer是什么?二、使用步骤1.将下面地址的代码下载到本地2.替换dependencies和devDependencies3.拷贝package目录4.在main.js引入代码5.拷贝src5.拷贝App.vue代码注意事项 一、bpmn-process-designer是什么? bpmn-process-designer是一个基于 bpmn.js,Vue 2.x 和 ElementUI 开发的流程设计器(前端部分),支持监听器,扩展属性,表单等配置,可自由扩展

weixin_43550766的博客 9453

数据结构与算法经典书籍——大话数据结构(带配套源码)

书本下载链接:链接:https://pan.baidu.com/s/1jgVnbBZoLgA8pshpxbapOQ 密码:577l 配套程序链接:https://pan.baidu.com/s/1HYka42KngWT2el7T0HO7LA 密码:i6hw 虽说数据结构以美国人Mark Allen Weiss 写的《数据结构与算法分析——C语言实现》最好,但是我发现他的书让人很不容易理解,可能我们...

耶律大石的博客 6万+

使用 Cynthion 与 Packetry 进行 USB 抓包与协议分析

Cynthion 是 Great Scott Gadgets 推出的USB 流量分析与注入设备。它具备以下特点:通过 FPGA 实现高速 USB 流量捕获;能够同时作为 USB Host 和 Device,进行调试和测试;支持输出 pcap 文件,可直接用 Wireshark 分析;提供 Python API,方便与上层软件联动。简单来说,Cynthion 是一个USB 协议分析仪 + 注入工具。硬件层捕获:实时拦截 USB 总线上的数据包;软件层解析。

YIMUleizi的博客 1263

从零到一:PrimeTime静态时序分析入门指南

本文详细介绍了PrimeTime静态时序分析(STA)的入门指南,从基础概念到实际应用全面覆盖。内容包括时序路径分类、PrimeTime环境搭建、时序约束设置与验证、时序分析与报告解读等核心内容,帮助工程师快速掌握STA技术,解决数字芯片设计中的时序收敛问题。

weixin_28730131的博客 268

大话数据结构

大话数据结构 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 第一章 概述 3.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间关系和操作等相关问题的学科。 4.数据:描述客观事物的符号,是计算机中可操作的对象,可以被计算机识别,并输入给计算机处理的符号集合。(数值类型:整型、实型,非数值类型:声音、图像、视频,数据:即符号。1—可输入到计算机中,2—能够被计算机程序处理) 数据元素:组成数据的、有一定意义的基本单位。 数据项:一个数据元素可由多个数据项组成。(数据

m0_46440010的博客 1128

大语言模型在金融风险预警中的推理应用探索

金融行业一直面临着各种风险,如信用风险、市场风险、操作风险等。准确及时的风险预警对于金融机构的稳定运营和投资者的利益保护至关重要。传统的金融风险预警方法主要基于结构化数据和统计模型,虽然在一定程度上能够识别风险,但对于非结构化数据的处理能力有限,难以捕捉到复杂的风险因素和潜在的风险趋势。大语言模型作为自然语言处理领域的重要突破,具有强大的语言理解和生成能力,能够处理各种形式的文本数据。

AI天才研究院 1167

大话数据结构PDF

《大话数据结构》相关下载地址重难点目录 下载地址 云盘: touch here. 提取码: 93dc 重难点目录 第一章 绪论 逻辑结构,物理存储结构(顺序和链式) 数据结构类型 第二章 算法 时间复杂度和空间复杂度,计算方法 最坏情况、平均情况。 第三章 链表 动态链表:指针,常用 静态链表:数组,无指针语言(Basic)使用,较少用 循环链表:(单循环)next 双向链表:next,prior 双向循环链表,插入时候的指针改动,顺序非常重要。–》 第四章

weixin_42528734的博客 4万+

基于STM32H5的循环GPDMA链表使用

STM32H503的GPDMA链表模式可实现灵活的数据传输。相比传统DMA直接编程方式,链表模式通过配置多个节点实现分散数据传输,支持循环链表功能。示例展示了如何使用GPDMA链表实现UART1循环发送数据:配置两个DMA节点分别指向不同发送缓冲区,构建循环链表并绑定到DMA通道。关键点包括:清空链表结构体、正确设置循环模式、检查节点配置。此方法提高了DMA使用的灵活性,适用于需要交替传输多段数据的场景。

kevin1499的博客 451

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 527

大话数据结构PDF/word

《大话数据结构》 PDF版本 链接:https://pan.baidu.com/s/1nfaEZBBEi-3-mTX7A4qfbA 提取码:30ky word版本 链接:https://pan.baidu.com/s/18hpIqQYy4wiVUAoBabqZ-A 提取码:e4ja

林夕07 1万+

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径

ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 507

程杰《大话数据结构》3-3静态链表(C语言源码+运行结果)

#include "string.h" #include "ctype.h" #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define

春卷同学的博客 236

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

程杰《大话数据结构》8-1 静态查找(C语言源码+运行结果)

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */ ...

春卷同学的博客 380

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

update 数据还原到5分钟前_每天5分钟用C#学习数据结构(1)线性表基础

【基础知识】| 作者 / Edison Zhou这是恰童鞋骚年的第183篇原创文章从今天开始,我们来开始温习计算机基础知识:数据结构,而且使用我们最熟悉的C#语言来学习。预读每一篇的阅读时间在5分钟左右,希望在你的碎片时间里对你有所帮助!第一篇会介绍线性表,线性表是最简单也是在编程当中使用最多的一种数据结构。例如,英文字母表(A,B,C,D...,Z)就是一个线性表,表中的每一个英文字母都是一个数...

weixin_39850699的博客 120

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

程杰《大话数据结构》9-1 排序(C语言源码+运行结果)

#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;ctype.h&gt; #include &lt;stdlib.h&gt; #include &lt;io.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #define O

春卷同学的博客 297

大话数据结构(读书笔记)

数据结构 什么是数据结构 是相互之间存在一种或多种特定关系的数据元素的集合。 说白了就是数据的集合、但是集合里面的数据之间存在特地的关系(这翻译得好像没说一样) 数据结构的逻辑结构 是指数据元素之间的相互关系 集合结构:集合中的数据元素除了同属一个集合外、它们之间没有其他关系。 线性结构:线性结构中的数据元素之间是一对一的关系 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系 图形结构:图形结构的数据元素是多对多的关系 数据结构的物理结构 指数据的逻辑结构在计算机存储形

CoderLi 869

【数据结构】《大话数据结构》笔记

《大话数据结构》阅读笔记 && 数据结构基础知识查漏补缺

小徐!勿忘初心! 821

大话数据结构--数据结构概述

数据结构概述前言一、数据结构绪论1.1 为啥要学数据结构?1.2 数据结构起源1.3 基本概念和术语1.3.1 数据1.3.2 数据元素1.3.3 数据项1.3.4 数据对象1.3.5 数据结构1.4 逻辑结构与物理结构1.4.1 逻辑结构1.集合结构2.线性结构3.树形结构4.图形结构1.4.2 物理结构1.顺序存储结构2.链式存储结构1.5 抽象数据类型1.5.1 两个实例1.坐标实例2.超级玛丽3.描述抽象数据类型的格式1.6 总结 前言 文章来源于大话数据结构 提升编程基础能力 数据结构、操作系统

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 2641

大话数据结构、数据结构(严蔚敏)电子书

链接:https://pan.baidu.com/s/14i08GhVjB430XGuPRSm-ZQ 提取码:hs7t 复制这段内容后打开百度网盘手机App,操作更方便哦

DX390609的博客 9094

大话数据结构--算法概述

数据结构概述前言二、算法2.1 二种算法的比较2.2 算法定义2.3 算法的特性2.3.1 输入输出2.3.2 有穷性2.3.3 确定性2.3.4 可行性2.4 算法设计的要求2.4.1 正确性2.4.2 可读性2.4.3 健壮性2.4.4 时间效率高和存储量低2.5 算法效率的度量方法2.5.1 事后统计方法.2.5.2 事前分析估算方法2.6 函数的渐近增长2.7 算法时间复杂度2.7.2 推导大0阶方法2.7.3 常数阶2.7.4 线性阶2.7.5 对数阶2.7.6 平方阶2.7.7 方法调用的时间复

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 2324

大话数据结构(代码实现)

阅读《大话数据结构》时按照书里面写的代码实现,时间紧凑,只写了前三章的,后面自己再看的时候写上剩下部分。

我想要去航海的博客 725

大话数据结构-栈

栈(stack)是限定仅在表尾进行插入和删除操作的线性表,是后进先出的线性表,顺序存储结构及代码实现,两栈共享空间的实现,链式存储结构链栈的实现。中缀表示法、前缀表示法、后缀表示法及代码实现。

村长Korbin 628

大话数据结构--图

tex=V_1)] 的权值最小,将顶点 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iQSwkPMO-1637250894603)(https://www.zhihu.com/equation?所以,整体的执行次数就是 (n-1) * 2(n-1),Prim算法的复杂度是 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fWO7UYu-1637250894629)(https://www.zhihu.com/equation?

2401_84184729的博客 1033
上一篇: C代码:使用概率的方法计算圆的面积
下一篇: [数据结构]头插法与尾插法
ilikeprograming
博客等级 码龄14年 46粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值