#include "string.h"
#include "ctype.h"
#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 1000 /* 存储空间初始分配量 */
/* Status 是函数的类型,其值是函数结果状态代码,如 OK 等 */
typedef int Status;
/* ElemType 类型根据实际情况而定,这里假设为 char */
typedef char ElemType;
Status visit(ElemType c) {
printf("%c ", c);
return OK;
}
/* 线性表的静态链表存储结构 */
typedef struct {
ElemType data;
int cur; /* 游标(Cursor) ,为 0 时表示无指向 */
} Component, StaticLinkList[MAXSIZE];
/* 将一维数组 space 中各分量链成一个备用链表,
space[0].cur 为头指针,
"0"表示空指针 */
Status InitList(StaticLinkList space) {
int i;
for (i = 0; i < MAXSIZE - 1; i++)
space[i].cur = i + 1;
space[MAXSIZE - 1].cur = 0; /* 目前静态链表为空,最后一个元素的 cur 为 0 */
return OK;
}
/* 若备用空间链表非空,则返回分配的结点下标,否则返回 0 */
int Malloc_SSL(StaticLinkList space) {
int i = space[0].cur;
/* 当前数组第一个元素的 cur 存的值 */
/* 就是要返回的第一个备用空闲的下标
*/
if (space[0]. cur)
space[0]. cur = space[i].cur;
/* 由于要拿出一个分量来使用了, */
/* 所以我们就得把它的下一个 */
/* 分量用来做备用 */
return i;
}
/*
* 在C99之前,C语言的标准没有提供布尔类型,但是这不意味着C90不能表示布尔值的概念。
* C中的所有布尔运算(&&, ||)以及条件声明(if, while)都以非零值代表真,零值代表假。
* 这样,在其他类型如一个整数或一个枚举中保存布尔值就变得很平常。
*
* */
/* 将下标为 k 的空闲结点回收到备用链表 */
void Free_SSL(StaticLinkList space, int k) {
space[k].cur = space[0].cur;
space[0].cur = k;
/* 把第一个元素的 cur 值赋给要删除的分量 cur */
/* 把要删除的分量下标赋值给第一个元素的 cur */
}
/* 初始条件:静态链表 L 已存在。操作结果:返回 L 中数据元素个数 */
int ListLength(StaticLinkList L) {
int j = 0;
int i = L[MAXSIZE - 1].cur;
while (i) {
i = L[i].cur;
j++;
}
return j;
}
/* 在 L 中第 i 个元素之前插入新的数据元素 e */
Status ListInsert(StaticLinkList L, int i, ElemType e) {
int j, k, l;
k = MAXSIZE - 1; /* 注意 k 首先是最后一个元素的下标 */
if (i < 1 || i > ListLength(L) + 1)
return ERROR;
j = Malloc_SSL(L);
if (j) {
/* 获得空闲分量的下标 */
L[j].data = e; /* 将数据赋值给此分量的 data */
for (l = 1; l <= i - 1; l++) /* 找到第 i 个元素之前的位置 */
k = L[k].cur;
L[j].cur = L[k].cur;
/* 把第 i 个元素之前的 cur 赋值给新元素的 cur */
L[k].cur = j;
/* 把新元素的下标赋值给第 i 个元素之前元素的 ur */
return OK;
}
return ERROR;
}
/* 删除在 L 中第 i 个数据元素 */
Status ListDelete(StaticLinkList L, int i) {
int j, k;
if (i < 1 || i > ListLength(L))
return ERROR;
k = MAXSIZE - 1;
for (j = 1; j <= i - 1; j++)
k = L[k].cur;
j = L[k].cur;
L[k].cur = L[j].cur;
Free_SSL(L, j);
return OK;
}
Status ListTraverse(StaticLinkList L) {
int j = 0;
int i = L[MAXSIZE - 1].cur;
while (i) {
visit(L[i].data);
i = L[i].cur;
j++;
}
return j;
printf("\n");
return OK;
}
int main() {
StaticLinkList L;
int i = 0;
i = InitList(L);
printf("初始化 L 后:L.length=%d\n", ListLength(L));
i = ListInsert(L, 1, 'F');
i = ListInsert(L, 1, 'E');
i = ListInsert(L, 1, 'D');
i = ListInsert(L, 1, 'B');
i = ListInsert(L, 1, 'A');
printf("\n 在 L 的表头依次插入 FEDBA 后:\nL.data=");
ListTraverse(L);
i = ListInsert(L, 3, 'C');
printf("\n 在 L 的“B”与“D”之间插入“C”后:\nL.data=");
ListTraverse(L);
i = ListDelete(L, 1);
printf("\n 在 L 的删除“A”后:\nL.data=");
ListTraverse(L);
printf("\n");
return i;
}
相关推荐
SAP PP后台配置实战:从BOM到工艺路线的全流程解析
本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。
04.线性表.链式存储结构(双向循环链表)
以下是用双向循环链表实现的线性表 #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType;//ElemType这里假设为int,可以根据需要进行更改 typedef int Status;//Status是函数的类型,其值是函数
深入浅出CenterFusion
结合论文和代码理解CenterFusion
《大话数据结构》之静态链表
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; #define MAXSIZE 1000 typedef struct { ElemType data; int cur; }Component; Component StaticLin
FPGA实现PI控制
FPGA实现PI控制
Win11右键菜单显示更多选项设置默认展开方法
在Windows 11操作系统中,用户可能会发现右键点击桌面空白处时,弹出的菜单中仅显示“显示更多选项”,而并非直接展示所有可用的选项。这对于希望快速访问特定功能的用户来说,无疑增加了一些不便。为了优化这一体验,本文将介绍两种简单的方法,帮助用户设置Win11右键菜单,使其默认展开包含的所有选项。通过上述两种方法,用户可以轻松地将Win11右键菜单设置为默认展开所有选项,从而提高工作效率和便捷性。希望这篇文章对你有所帮助!
【数据结构】静态链表
/* 实验2:输入一组整型元素序列,建立一个单链表, 实现该单链表的遍历;在该单链表中查找某一元素,查找成功返回1,否则返回0; 在该单链表中插入和删除某个元素。 */ #include #include #define OVERFLOW -2 #define OK 1 #define ERROR 0 #define NULL 0 typedef int ElemType; typede
Openharmony 命令行工具hdc的获取与安装
OpenHarmony实战:命令行工具hdc安装应用指南_hdc工具-优快云博客t=N7T8。
设计模式 总结 根据《大话设计模式》程杰 整理
1.简单工厂模式 用一个单独的类来创造实例。 2. 策略模式(Strategy) 定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 主要用于:需要在不同时间应用不同的业务规则,就可以考虑用策略模式处理这种变化的可能性。 3.单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。 若一个类承担的职责过多,就等于
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案
【Unity】【2D】用连续图片生成动画Animation的简明步骤
本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。
程杰“大话设计模式”中的设计原则
依赖倒置其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是 终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如果你能够想到多余一个的动机去改变一个类,那么这类就具有多于一个的职责,这时就应该考虑类的职责分离。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。迪米特法则的根本思想是强调类之间的松耦合。
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
简单数据结构的妙用(一):静态链表
简单数据结构的妙用(一):静态链表 目录 简单数据结构的妙用(一):静态链表 一、参考文章 二、静态链表的背景 三、基本实现 四、插入操作 五、删除操作 六、链表长度 七、优缺点 一、参考文章 内容主要出自程杰的《大话数据结构》静态链表一节。 “指针”是成熟的编程语言必须具有的概念吗?—— 代码宇宙的回答:https://segmentfault.com/q/1010000003797714/a-1020000003798889 二、静态链表的背景 指针的本意:在一个变量中
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
程杰《大话数据结构》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
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
【PAT b1025】【静态链表】
Ahhhh回来啦!最近可能集中做一波题www 之前去浅尝辄止了半天别的,现在学不下去了再回来做做题TvT 在看程杰老师的《大话数据结构》以及胡凡老师的《算法笔记上级训练实战指南》,想多做点题巩固一下我相当于没有的数据结构基础。【p.s.大话数据结构真的讲的通俗易通,程杰老师是用好几个生动的例子来分布讲解一个数据结构,我之前想的是能不能把数据结构具象化、模拟化,串成一个完整的情景和故事讲出来,还是有点难quq】 这道题的题意很简单,链表节点信息是由一个五位数构成的地址、数据以及下一个节点的地址构成的。要求是给
第3章:3.静态链表
本篇文章参考的是《大话数据结构》,感谢作者程杰先生。 一.对于没有指针的语言怎么实现单链表的功能? 有人想出来一个方法,用数组代替指针,来表示单链表。 真是不得不佩服他们的智慧呀! 二:数组描述的链表叫静态链表(另游标实现法): 首先让数组的元素都是由两个数据域组成,data和cur。 也就是说,数组的每一个下标对应一个data和一个cur。数据域data用来存放数据元素; 而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。 结构体表示如下: /* 线性表的静态链表存储结构 */ t
《数据结构与算法》(五)- 链表详解
目录链表的定义 链表的定义
数据结构之线性表
数据结构之线性表写在前面Concept抽象数据类型顺序存储结构链式存储结构静态链表循环链表双向链表 写在前面 记一些数据结构复习过程中的随笔。我主要看的是程杰的大话数据结构和清华的那本数据结构。 Concept What is 线性表? 线性表:零个或多个数据元素的有限序列。 ps:这里的数据元素,可以由若干个数据项组成,例如由学生信息组成的线性表,每个学生信息结构体被认为线性表中的一个元素。 抽...
2021数据结构学习笔记(严蔚敏版)
2021数据结构学习笔记(严蔚敏版) 第2章 线性表 线性表的顺序表示和实现 线性表的顺序表示和实现(二级指针实现) 线性表的链式表示和实现 静态链表 循环链表 双向链表 第三章 栈和队列 栈 栈的应用—递归 队列 第五章 数组 数组 第六章 树和二叉树 树和二叉树 二叉树的创建方式 遍历二叉树及其应用 线索二叉树 树和森林 哈夫曼树及其应用 第七章 图 图的基本概念和存储方式 图的遍历 图的最小生成树 图的拓扑排序和关键路径 图的最短路径 第九章 查找 静态查找表 动态查找表(BST/AVL/B/B+/R
数据结构与算法分析--线性表
在读研开始,需要了解一些数据结构方面的知识,就自己努力的敲代码啊。。。 在补习过程中,看了两位大神的著作:程杰的《大话数据结构》、解学武老师的网页文章。感觉很受用,再次表示感谢。 直接开始线性表:线性表、单链表、双链表、循环链表、静态链表。 线性表存储方式: //循环集合B中的每个元素,判断当前元素是否在A中,若不存在,则插入到A中 void union(List *La,List *L...
Java数据结构第一讲-排序算法
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据结构,例如跳表之于redis、B+树之于mysql、倒排索引之于ES,熟悉了底层数据结构,对框架有了更深层次的理解,在后续程序设计过程中就更能得心应手。掌握常见数据结构和算法的重要性显而易见,本文主要讲解了几种常见的数据结构及基础的排序和查找算法,最后对高频算法笔试面试题做了总结。本文会持续补充,希望对大家日
《大话数据结构》阅读笔记。第二天。2018-7-24
单链表的第i个位置元素获取: 1.声明一个节点p,指向第一个结点,从j=1 开始遍历,并当j<i时继续 2.链尾时则不存在 3.成功则返回数据 status GetElem(LinkList L, int i, ElemType *e) { int j=1; LinkList p=L->next; while ( p && j<i ) { p ...
数据结构(一):顺序表
线性基本概念 线性表的定义:线性表是具有相同特性数据元素的一个有序序列。 线性表的存储结构: 顺序表 链表 顺序表有随机访问的特性 链表结点的存储空间利用率较顺序表稍微低一些,但是方便插入删除,不需要移动任何元素 链表有一下五种形式: 单链表 双链表 循环单链表 循环双链表 静态链表 线性表的结构体定义 顺序的结构代码 # define MAXSIZE 100 /* 存储空间初始分配...
数据结构-线性表
这几天在看程杰编写的《大话数据表结构》,看到线性表的时候,长篇大论看的我晕头转向,看完以后通过百度等方式整理了一下自己的思维,把这个表结构进行梳理一下 线性表可以分为两种存储结构 1.顺序存储结构 先来看看他的定义“线性表的顺序存储结构,指的是用一段地址连续的单元依次存储线性表的数据元素”。 说白了就是在内存中找了一块地儿通过占位的方式把一定内存占了,然后把数据类型的数据元素依次存
3、线性表
参考:《大话数据结构》程杰线性表(List):零个或多个数据元素的有限序列,具有像线一样的性质的表。因为是序列,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都是有且只有一个前驱和后继。线性表强调是有限的。3.1、抽象数据类型ADT 线性表(List) Data 线性表的数据对象集合为{a1, a2,....an},每个元素的类型均为DataType
1007



被折叠的 条评论
为什么被折叠?



