当前位置: 首页 > 编程日记 > 正文

数据结构-线性表的顺序结构

  1 #include "stdio.h"
  2 #include "stdlib.h"
  3 
  4 typedef int ElemType;        //线性表存储基本类型
  5 typedef int Status;            //基本操作函数类型
  6 #define LIST_INT_SIZE 50    //线性表初始化存储空间分配量
  7 #define LISTINCREMENT 10    //线性表存储空间分配量增值
  8 #define OK 1
  9 #define ERROR 0
 10 
 11 typedef struct 
 12 {
 13     ElemType *elem;    //存储空间基址
 14     int length;        //当前长度
 15     int listsize;    //当前分配的存储容量(以sizeof(ElemType)为单位)
 16 }SqList;
 17 
 18 //构建一个空的线性表
 19 Status InitList(SqList &L)
 20 {
 21     L.elem = (ElemType *)malloc(LIST_INT_SIZE * sizeof(ElemType));
 22     if(!L.elem)                        //如果初始化失败返回ERROR
 23         return ERROR;
 24     L.length = 0;                    //空表长度为0
 25     L.listsize = LIST_INT_SIZE;        //初始存储容量
 26     return OK;    
 27 }//InitLise
 28 
 29 //销毁线性表L
 30 Status DestroyList(SqList &L)
 31 {
 32     free(L.elem);    //收回空间
 33     L.elem = NULL;    //基址指向NULL
 34     L.length = 0;    //长度变0
 35     L.listsize = 0;    //清除存储容量
 36     return OK;
 37 }//DestroyList
 38 
 39 //重置线性表L为空表
 40 bool ClearList(SqList &L)
 41 {
 42     L.length = 0;
 43     return OK;
 44 }//ClearList
 45 
 46 //查看线性表是否为空表
 47 Status ListEmpty(SqList L)
 48 {
 49     if(L.length == 0)
 50         return OK;
 51     else
 52         return ERROR;
 53 }//ListEmpty
 54 
 55 //查看线性表的元素个数
 56 int ListLength(SqList L)
 57 {
 58     return L.length;    //返回长度
 59 }//ListLength
 60 
 61 //用e返回第i个数据元素的值
 62 Status GetElem(SqList L, int i, ElemType &e)
 63 {
 64     if(i < 1 || i > L.length)    //判断i值是否合法
 65         return ERROR;
 66     e = L.elem[i-1];                //赋值第i个元素值
 67     return OK;
 68 }//GetElem
 69 
 70 //返回L中第一个与e满足关系compare()的数据元素
 71 //若这样的数据元素不存在则返回0
 72 int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType,ElemType))
 73 {
 74     ElemType *p = L.elem;
 75     int i = 1;
 76     while(i <= L.length && !compare(*p++,e))
 77         ++i;
 78     if(i <= L.length)
 79         return i;
 80     else
 81         return -1;
 82 }//LocateElem
 83 
 84 //若cur_e是L的数据元素,且不是第一个,则用pre_e返回他的前驱
 85 //否则操作是啊比,pre_e无定义
 86 Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e)
 87 {
 88     int i = 2;
 89     ElemType *p = L.elem+1;
 90     while(i <= L.length && *p != cur_e)
 91     {
 92         p++;
 93         i++;
 94     }
 95     if(i > L.length)
 96         return ERROR;
 97     else
 98     {
 99         pre_e = *--p;
100         return OK;
101     }
102 }//PriorElem
103 
104 //若cur_e是L的数据元素,且不是最后一个,则用next_e返回他的后驱
105 //否则操作是啊比,next_e无定义
106 Status NextList(SqList L, ElemType cur_e, ElemType &next_e)
107 {
108     int i = 1;
109     ElemType *p = L.elem;
110     while(i <= L.length && *p != cur_e)
111     {
112         ++p;
113         ++i;
114     }
115     if(i == L.length)
116         return ERROR;
117     else
118     {
119         next_e = *++p;
120         return OK;
121     }
122 }//NextList
123 
124 //插入元素
125 Status ListInsert(SqList &L, int i, ElemType e)
126 {
127     if(i < 1 || i > L.length+1)    //判断i值是否合法
128         return ERROR;    
129     SqList newbase;        //用于存储新加元素的位置空间
130     if(L.length >= L.listsize)    //当前存储分配已满,增加分配
131     {
132         newbase.elem = (ElemType *)realloc(L.elem,
133             (L.listsize + LISTINCREMENT) * sizeof(ElemType));
134         if(!newbase.elem)    //存储分配失败
135             return ERROR;        
136         L.elem = newbase.elem;        //新基址
137         L.listsize += LISTINCREMENT;    //增加存储容量
138     }
139     ElemType *q = &(L.elem[i-1]);    //q指向插入位置
140     for (ElemType *p = &(L.elem[L.length-1]); p >= q; --p)    //p指向表尾
141         *(p+1) = *p;    //插入位置及之后的元素右移
142     *q = e;    //插入元素
143     ++L.length;    //表长加一
144     return OK;
145 }//ListInsert
146 
147 //删除第几个元素并返回值
148 Status ListDelete(SqList &L, int i, ElemType &e)
149 {
150     if((i < 1) || (i > L.length))            //判断i值是否合法
151         return ERROR;                        //i值不合法返回失败
152     ElemType *p = &(L.elem[i-1]);            //p指向被删除元素的位置
153     e = *p;                                    //返回被删除元素的值
154     ElemType *q = L.elem + L.length - 1;    //q指向最后一个元素的位置
155     for (++p; p <= q; ++p)                    //被删除元素之后的元素左移
156         *(p-1) = *p;
157     --L.length;                                //当前表长减一
158     return OK;
159 }//ListDelete
160 
161 //依次对L的每一个数据元素调用Visit()函数
162 Status ListTraverse(SqList L, void(*Visit)(ElemType*))
163 {
164     ElemType *p = L.elem;
165     int i;
166     for(i = 1; i <= L.length; i++)
167         Visit(p++);
168     printf("\n");
169     return OK;
170 }//ListTraverse
171 
172 //ListTraverse()调用函数Visit()
173 //Visit函数在这里做输出链表功能
174 void Visit(ElemType *c)
175 {
176     printf("%d",*c);    //%d随data类型而变
177 }
178 
179 //查找元素
180 int ListLocate(SqList L, ElemType e)
181 {
182     int i = 1;
183     while(i <= L.length)
184     {
185         if (L.elem[i-1] == e)
186             break;
187         i++;
188     }
189     if(i <= L.length)            //找到指定元素则返回位置否则返回-1
190         return i;
191     else
192         return -1;
193 }//ListLocate

线性表的顺序表达的13个基本函数。

参考《数据结构(C语言版)》严蔚敏编著

转载于:https://www.cnblogs.com/ABook/p/5370008.html

相关文章:

项目背景怎么描述_课程游戏背景下幼儿户外活动的组织和实施 ——记岱山县课程项目实施组活动...

课程游戏背景下幼儿户外活动的组织与实施——记岱山县课程项目实施组活动为了深入推进园本化课程实施的实践与研究&#xff0c;加强项目组幼儿园课程的建设与实施&#xff0c;提升项目组幼儿园课程质量。11月23日&#xff0c;县课程项目实施组活动在东沙镇中心幼儿园开展。本次…

兔子生兔子递归的理解

重要的是找规律&#xff01; 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 月份 兔子对数 1 …

美团App首页实现之Category_HeaderView可翻页实现

一。主要实现功能&#xff1a;自定义indicator&#xff0c;侧滑页面切换页面内容&#xff0c;indicator跟着变化&#xff1b;二。实现步奏&#xff1a;1.自定义ViewPagerIndicator①&#xff1a;定义三个不同颜色的画笔②&#xff1a;在画布上画三个静态圆③&#xff1a;改变CX…

爬虫与浏览器的区别,爬虫产生(出自简书)

一篇文章了解爬虫技术现状 - 简书https://www.jianshu.com/p/fbdad6f77d0c 需求万维网上有着无数的网页&#xff0c;包含着海量的信息&#xff0c;无孔不入、森罗万象。但很多时候&#xff0c;无论出于数据分析或产品需求&#xff0c;我们需要从某些网站&#xff0c;提取出我们…

Unity2D游戏开发和C#编程大师班

本课程采用现代游戏开发的最新内容和最新技术(Unity 2D 2022) 学习任何东西的最好方法是以一种真正有趣的方式去做&#xff0c;这就是这门课程的来源。如果你想了解你看到的这些不可思议的游戏是如何制作的&#xff0c;没有比这门课更好的起点了。我们确保本课程具备从初学者(即…

python实训总结报告书_20172304 实验四python综合实践报告

20172304 实验四python综合实践报告 姓名&#xff1a;段志轩 学号&#xff1a;20172304 指导教师&#xff1a;王志强 课程&#xff1a;Python程序设计 实验时间&#xff1a;2020年5月13日至2020年6月14日 实验分析 本次是使用python来进行软件开发&#xff0c;python是一个有很…

Tornado框架

Tornado介绍Tornado 是 FriendFeed 使用的可扩展的异步非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py&#xff08;豆瓣用这个写的&#xff09; 或者 Google 的 webapp&#xff0c;不过为了能有效利用非阻塞式服务器环境&#xff0c;这个 Web 框…

重组系统分区时设置系统盘

在快速分区那里选择另外一个模式&#xff0c;并且只选一个主分区

Javascript:DOM动态创建元素实例应用

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Dom:动态创建元素</title> </head> <body><ul id"demo1"> </ul> <input type"text" id"t…

上帝和面向对象的七天

上帝用7天创造了“面向对象” |【Python之父客串】http://bbs.fishc.com/thread-102596-1-1.html(出处: 鱼C论坛) 第一天&#xff1a; 计算机的诞生使得人类使用汇编语言进行编程&#xff0c;上帝说这个太复杂了&#xff0c;于是将编译的秘密告诉约翰.巴克斯.于是巴克斯创造了…

Maya游戏角色绑定入门学习教程 Game Character Rigging for Beginners in Maya

准备好开始为游戏制作自己的角色动画了吗&#xff1f; 你会学到什么 了解Maya的界面 优化并准备好你的模型&#xff0c;为游戏做准备 了解关节以及如何使用它们来构建健壮的角色骨骼&#xff0c;以便在任何游戏引擎中制作动画 了解IK和FK系统之间的区别 组织我们的3d场景以获得…

KMP算法简单分析

定义问题 字符串匹配是这样一个问题&#xff1a; 对于两个包含且仅包含字母表∑中的字母的串P&#xff0c;T&#xff0c;计算出所有有效的**移进**s使得P[1..|P|] T[s1..s|P|]。(|P|为P的长度)。 或者说&#xff1a;求出在什么位置P被T完全包含。 为了表达方便&#xff0c;定…

mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询

图/文&#xff1a;迷神Thinkphp是一款不错的国产框架&#xff0c;使用范围广&#xff0c;应用也比较多。随着网站访问增大往往需要使用mysql主从同步功能&#xff0c;本身Thinkphp自带了主从读写分离的功能了。但是我们经常有一个场景就是某些特定的查询需要从主库进行查询&…

Microsoft Store无法联网解决方法

设置 网络 代理 关闭

MongoDB for C#基础入门

笔者这里采用的是mongoDB官网推荐使用.net驱动&#xff1a; http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_tour/ 有关于MongoDB的安装读者可以参考其他的博客&#xff0c;对于基本的学习来说并不需要进行过多的配置。 创建连接 这一步骤跟ADO.NET连…

李宏毅机器学习自己的笔记(一)----------Introduction of MachineLearning

视频来源&#xff1a;李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p2 声明&#xff1a;图片均来自于视频截图 问题一&#xff1a; AI&#xff0c;机器学习 &#xff0c;深度学习关系 答&#xff1a;AI人工智能…

Unity从零开始构建能力体系 Unity Ability System

从零开始构建能力体系 你会学到什么 如何实施能力体系 如何使用用户界面工具包创建用户界面 如何使用Unity的GraphView API 如何实现保存系统 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根…

mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础

参考《HCIA-AI2.0培训教材》《HCIA-AI2.0实验手册》认证要求&#xff1a;了解TensorFlow2.0是什么以及其特点掌握TensorFlow2.0基础和高阶操作方法熟悉TensorFlow2.0中的Keras API简介&#xff1a;TensorFlow是目前最为流行的深度学习框架&#xff0c;是人工智能领域的第一主要…

dev c++ 调试时候发生软件崩溃解决办法

dev c 调试时候发生软件崩溃解决办法 安装好dev cpp&#xff0c;准备调试的时候发现软件崩溃&#xff0c;这种情况很好解决。只要在工具菜单中点开编译选项&#xff0c;找到代码生成/优化一栏&#xff0c;将链接器的“产生调试信息”选项改为yes&#xff0c;即可

运行hadoop fs -ls 命令显示本地目录问题

2019独角兽企业重金招聘Python工程师标准>>> 运行hadoop fs -ls 命令显示本地目录问题 问题原因&#xff1a;是因为在hadoop配置文件中没有指定HDFS的默认路径 解决办法&#xff1a;有两个办法 1、使用HDFS全路径访问 hadoop fs -ls hdfs://192.168.1.1:9000/ 2…

李宏毅机器学习笔记(二)-------Why we need learn Machine Learning?

视频&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibilihttps://www.bilibili.com/video/av10590361/?p2 真是一个逗波&#xff1a; AI训练师&#xff1a; 为AI选择合适的model和损失函数。然后达到最好的功能

mixamo网站FBX模型带骨骼绑定动作库

mixamo网站FBX模型带骨骼绑定动作库&#xff0c;unity游戏各职业人物动画&#xff0c;兼容3dmax maya c4d iclone blender等主流3D软件 mixamo游戏3D模型带骨骼绑定FBX动作库 大小解压后&#xff1a;17.2G 素材获取&#xff1a;mixamo网站FBX模型带骨骼绑定动作库-云桥网

java modbus通讯协议_物联通讯协议一(Modbus)

1、Modbus是一种串行通信协议&#xff0c;是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto)&#xff0c;并且现在是工业电子设备之间常用的连接方式。2、Modbus是一种串…

hibernate3

hibernate3 &#xff08;整合到spring中的core核心配置中的hibernate3&#xff09; <!-- 基于hibernate的Session工厂 --><bean id"sessionFactory"class"org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><!…

伦理困境:人工智能浪潮与“AI威胁论”之争

首先&#xff0c;何为伦理&#xff1f; 2018年1月份的《科学与社会》报刊中有如下阐述&#xff1a; 伦理一词&#xff0c;英文为ethics&#xff0c;一词源自于希腊文的“ethos”&#xff0c;其意义与拉丁文“mores”差不多&#xff0c;表示风俗、习惯的意思。西方的伦理学发展流…

在 ASP.NET 网页中不经过回发而实现客户端回调

一、使用回调函数的好处 在 ASP.NET 网页的默认模型中&#xff0c;用户会与页交互&#xff0c;单击按钮或执行导致回发的一些其他操作。此时将重新创建页及其控件&#xff0c;并在服务器上运行页代码&#xff0c;且新版本的页被呈现到浏览器。但是&#xff0c;在有些情况下&…

李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent

视频来源&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p3机器学习的目的就是找到最优函数&#xff0c;而回归的目的就是我们要找的函数的输出是一个数值。例如下面的例子&#xff0c;不管是输入怎样的…

完整的虚幻引擎超级课程:从初学者到专家

通过这个循序渐进的课程&#xff0c;学习如何像专业人士一样开发游戏和设计&#xff01; 你会学到什么 如何使用虚幻引擎及其元素 电子游戏力学原理 平衡计分卡几何原理 蓝图脚本的原则 如何设计、开发和编写你的关卡来复制你最喜欢的游戏 流派:电子学习| MP4 |视频:h264&…

atitit.userService 用户系统设计 v5 q330

atitit.userService 用户系统设计 v5 q330 1. 新特性1 2. Admin login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> 商家注册2 3.2. <!-- 会员登录使用 -->3 3.3. <!-- 会员退出登录 -->3 3.4. <!-- 进入会员首页 -->3 3.5. <!-- 进入会员信…

python打包为exe文件_Pyinstaller(python打包为exe文件)

需求分析&#xff1a; python脚本如果在没有安装python的机器上不能运行&#xff0c;所以将脚本打包成exe文件&#xff0c;降低脚本对环境的依赖性&#xff0c;同时运行更加迅速。 当然打包的脚本似乎不是在所有的win平台下都能使用&#xff0c;win7有一部分不能使用&#xff0…