数据结构学习笔记 <1> 线性表
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];//存了一个数组,其最多能存MAXSIZE个元素
int Last;//最后一个元素的下标!
};
struct LNode L;
List PtrL;
List MakeEmpty() {
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL -> Last = -;
return PtrL;
}
int Find(ElementType X, List L) {
int i = ;
while(i <= PtrL->Last && PtrL->Data[i] != X)
i++;
if(i > PtrL->Last) return -;//如果没找到返回-1
else return i;//找到后返回的是存储位置 即下标
}
void Insert(ElementType X, int i, List PtrL) {
int j;
if(PtrL->Last == MAXSIZE-) {//表空间已满,则不能插入
printf("表满");
return;
}
if(i < || i > PtrL->Last+) {//检查输入是否合法
printf("位置不合法");
return;
}
for(j = PtrL->Last; j >= i-; j--) //注意这里顺序不能从前往后
PtrL->Data[j+] = PtrL->Data[j];
PtrL->Data[i-] = X;
PtrL->Last++;//last仍指向最后元素!
return;
}
void Delete(int i, List PtrL) {
int j;
if(i < || i > PtrL->Last+) {//检查输入是否合法
printf("不存在第%d个元素",i);
return;
}
for (j = i; j <= PtrL->Last; j++)
PtrL->Data[j-] = PtrL->Data[j];
PtrL->Last--;
return;
}
typedef struct LNode *List;
struct LNode {
ElementType Data;
List Next;//存放指向下一个结点的指针
}L;
List PtrL;
int Length(List PtrL) {
List p = PtrL;//p指向表的第一个节点
int j = ;
while(p) {
p = p->Next;
j++;
}
return j;
}
List FindKth(int K, List PtrL) {
List p = PtrL;
int i = ;
while (p != NULL && i < K) {
p = p->Next;
i++;
}
if(i == K) return p;//找到第K个返回指针
else return NULL;//否则返回空
}
List Find(ElementType X, List PtrL) {
List p = PtrL;
while(p != NULL && p->Data != X)
p = p->Next;
return p;
}
List Insert(ElementType X, int i, List PtrL) {
List p, s;
if(i == ) {//新节点插入到表头
s = (List)malloc(sizeof(struct LNode));//申请、填装节点
s->Data = X;
s->Next = PtrL;
return s; //返回新表头指针
}
p = Find(i-,PtrL); //查找第i-1个结点
if(p == NULL) { //第i-1个不存在 无法插入
printf("参数i错");
return NULL;
} else {
s = (List)malloc(sizeof(struct LNode)); //申请、填装结点
s->Data = X;
s->Next = p->Next; //新节点插入在第i-1个节点的后面
p->Next = s;
return PtrL;
}
}
List Delete(int i, List PtrL) {
List p, s;
if( i == ) { //若要删除的是表的第一个结点
s = PtrL; //s指向第1个结点
if (PtrL != NULL) PtrL = PtrL->Next; //从链表中删除
else return NULL;
free(s); //释放被删除结点
return PtrL;
}
p = FindKth(i-, PtrL); //查找第i-1个结点
if (p == NULL) {
printf("第%d个结点不存在", i-);
return NULL;
} else if (p->Next == NULL) {
printf("第%d个结点不存在",i);
return NULL;
} else {
s = p->Next; //s指向第i个结点
p->Next = s->Next; //从链表中删除
free(s); //释放被删除结点的空间
return PtrL;
}
}
数据结构学习笔记 <1> 线性表的更多相关文章
- C语言数据结构基础学习笔记——基础线性表
线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...
- GJM : 数据结构学习笔记
--------------------------数据结构 --------------------数据结构分 线性数据结构给非线性数据结构 数据和结合 线性表(顺序存储方式)特点:有且仅有一个开始 ...
- Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法
Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...
- ES6中Map数据结构学习笔记
很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...
- 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...
- C语言数据结构基础学习笔记——静态查找表
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- 数据结构学习笔记——顺序数组1
线性表最简单的刚开始就是顺序存储结构,我是看着郝斌的视频一点一点来的,严蔚敏的书只有算法,没有具体实现,此笔记是具体的实现 为什么数据结构有ADT呢,就是为了满足数据结构的泛性,可以在多种数据类型使用 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
随机推荐
- Java(一)环境的安装与配置
一.JDK的安装 1.JDK与JRE的区别 Java开发环境,简称JDK(Java Development Kit),它是Java的核心,包括了Java编译器.Java运行环境.Java打包工具.Ja ...
- 0011 基于DRF框架开发(04 普通序列化器)
普通序列化器和模型无关,只是对针对提交字段的定义. 本文定义三个序列化器: 教师序列化器,学生序列化器,教师学生序列化器.这三个序列化器都使用普通序列化器. 1 教师序列化器 在Application ...
- python multiprocessing 耗内存问题
multiprocessing在每创建一个进程时,会将主进程的内存空间原封不动的复制一份到子进程,这样一来内存消耗很容易就翻几倍,导致程序无法运行. 究其原因,是启动进程时采用了os.fork(),使 ...
- mysql 基础sql语法总结(一)DDL
mysql数据库: SQL数据库语言可分为四部分: 1.DDL:对数据库或表的进行操作结构操作 2.DML:对表的记录进行更新(增.删.改)* 3.DQL:对表的内容进行查询 **(重难点) 4.DC ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- 华为高斯 GaussDB 100 OLTP 单机在 RHEL 7.6 上的安装
目录 你需要知道的 操作系统安装 GaussDB 100 安装 环境设置 创建用户组/用户/文件夹 软件上传/解压/安装 启动数据库 DataStudio 连接 服务器环境设置 DataStudio ...
- c++ md5算法实现(转)
原文链接:C++计算文件的MD5值 其他:c++输入文件流ifstream用法详解
- C++ lvalue(左值)和rvalue(右值)
lvalue(左值)和rvalue(右值) 昨天写代码遇见一个这样的错误:{ "cannot bind non-const lvalue reference of type 'int& ...
- How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20
本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...
- 微信小程序 --- 日历效果
wxml部分: <view class='box1' style='width: {{ sysW * 7 }}px'> <view class='dateBox'>{{ yea ...