#include "CursorList.h"

/*

使用一个游标数组来模拟 malloc/free行为。

返回的永远是一个数值,这个数值代表在 cursorspace中的数值,以及指向使用空间的

下标;

它为0则等同于NULL指针;

表头?表头是刚开始分配得到的位置;

一定要注意区分,cursorspace的0位置不是表头;

实现的关键,应该是首先实现 alloc/free

*/

/*

为了多重性,我的 分配 和 释放函数,要多传入一个 cursorspace

回顾之前的版本,我是没有真正理解 链表的一些使用细节。链表在使用时,

是无需另外记录 链表到达的最后位置的(那是普通数组下标记录方案的后遗症)

通过 malloc/free本身,已经可以获得这些信息,所有需要记住的,只是链表头

的位置;

另一点,元素进入链表后,元素的排列顺序其实并不重要,除非你已经明确要把某个

元素插入某个位置,否则都不重要;它们总是靠next指针按顺序连接在一起;

最后把 0 位置 定义成 CURSOR_NULL,则在语意上,它与 一般标准的可以使用

malloc/free的情形更加接近,更方便移植;

特别要注意的是,在cursorlist方案中,所有操作的指针 其实都是 数字,它们是

CursorPos,亦即 int;

而且,我要实现的cursorlist方案,更加接近 linux内核中的版本,只不过我并不

特别在意实现为 双向链表;

也就是,我的链表只是记录位置本身,而不涉及所操作的元素本身;

对于  游标情形而言,也可以简单理解为,cursorlist只是操作 下标,然后所操作的元素

通过下标来索引;

与此同时,将不再需要 DeleteList这个操作,因为这件事情已经没有意义;

*/

/*

pool表示即将要使用的cursor space,记录下标的数组;

*/

void CursorInitSpace(CursorPos *space,int Max)

{

int i;

for(i = 0;i < Max - 1;i++)

space[i] = i + 1;

space[i] = 0;

}

// 这不是一个纯粹的 alloc函数,因为它同时把下一个位置置零

CursorPos CursorAlloc(CursorPos *space)

{

CursorPos P;

P = space[0];

space[0] = space[P];

return P;

}

static void CursorFree(CursorPos *space,CursorPos pos)

{

space[pos] = space[0];

space[0] = pos;

}

CursorPos CursorCreate(CursorPos *space)

{

CursorPos Head;

Head = CursorAlloc(space);

if(Head == CURSOR_NULL)

return;

space[Head] = CURSOR_NULL;

return Head;

}

void CursorInsert(CursorPos *space,CursorPos pos)

{

CursorPos temp;

temp = CursorAlloc(space);

if(temp == CURSOR_NULL)

return;

space[temp] = space[pos];

space[pos] = temp;

}

CursorPos FindPrevCursor(CursorPos *space,CursorPos head,CursorPos pos)

{

CursorPos P;

P = head;

while( (space[P] != CURSOR_NULL) && space[P] != pos  )

P = space[P];

return P;

}

CursorPos LastCursor(CursorPos *space,CursorPos Head)

{

CursorPos P;

P = Head;

while(space[P] != CURSOR_NULL )

P = space[P];

return P;

}

// 在一般情况下,通过指定要删除的元素,来选择删除,但这里只是一个单纯的链,

// 而链表头不允许删除,除此以外,测试时,只能寻找一个相对确定的位置以方便删除;

// 这里我们选择 表尾;

void CursorDelete(CursorPos *space,CursorPos head,CursorPos pos)

{

CursorPos Prev,temp;

Prev = FindPrevCursor(space,head,pos);

if(space[Prev] == CURSOR_NULL)

return;

temp = space[Prev];

space[Prev] = space[temp];

CursorFree(space,temp);

}

// end of file -------------------------------------------------------

pcb结构链表_简单说说链表和一个应用实例相关推荐

  1. python协同过滤调用包_简单的python协同过滤程序实例代码

    本文研究的主要是python协同过滤程序的相关内容,具体介绍如下. 关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看 ...

  2. java城市链表_数据结构城市链表 1. 城市链表 [问题描述]将若干城市的信息 联合开发网 - pudn.com...

    数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明:  1. 城市链表 [问题描述 ...

  3. c语言释放整个链表,最简单的链表删除第一个节点时释放内存的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1 #include 2 #include "list.h" 3 4 int IsEmpty(List L) 5 { 6      r ...

  4. python游戏小项目简单_[简单学Python] 通过一个小游戏完成Python入门[2]变量和赋值...

    变量和赋值 到这里,你已经成功地打印出了千寻的名字和卖身契.与此同时,千寻也成为了汤婆婆的工人,渐渐地,她忘记了自己是谁,遗失了自己"姓名"的信息. 那么,在信息纷繁的代码世界里, ...

  5. svn服务器搭建和使用_简单使用nodejs搭建一个静态服务器

    前提:系统安装nodejs 搭建步骤 使用nodejs搭建服务器,简单的来说可以分为三步: require相应的模块 创建服务器 配置端口 启动服务器 必要的nodejs模块 以下模块都是以 var ...

  6. 运动场馆预定系统怎么做_简单教你做一个健身房预约小程序

    一,开发手段 1:linux+php+mysql+微信小程序 服务器采用linux服务器,linux服务器保证了服务的安全性,以及稳定性,linux中搭载apache服务器,稳定性非常的好,毕竟是老牌 ...

  7. pcb结构链表_知乎

    01 前言 Pierre-Alexandre Braeken在SecTor2016上做了一个很棒的演讲--HACK MICROSOFT BY USING MICROSOFT SIGNED BINARI ...

  8. pcb结构链表_第2章 2-1进程与PCB

    2.1 进程的基本概念 1.关于程序执行顺序 1)引入前趋图 描述进程执行前后关系的图 有向无循环图(DAG) Pi结点:描述一个程序段.进程.或一条语句. 有向边"->": ...

  9. 链表list(链式存储结构实现)_数据结构知否知否系列之 — 线性表的顺序与链式存储篇(8000 多字长文)...

    从不浪费时间的人,没有工夫抱怨时间不够. -- 杰弗逊 线性表是由 n 个数据元素组成的有限序列,也是最基本.最简单.最常用的一种数据结构. 作者简介:五月君,Nodejs Developer,热爱技 ...

最新文章

  1. microsoft word中在公式后插入可交叉引用的公式编号
  2. Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用
  3. jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
  4. elasticsearch2.2之javaApi
  5. ele-plus包的安装和使用
  6. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!
  7. Ruby On Rails 安装手记
  8. 分享一个debian系统优秀的镜像源
  9. Git修改已提交的commit
  10. GBDT原理及利用GBDT构造新的特征-Python实现
  11. Qt学习笔记之GUI基本知识
  12. Spark Structured Steaming 聚合、watermark 以及 window操作,结合输出模式的研究总结
  13. 学信网如何通过证件编码查学历
  14. 渗透测试工程师基础入门
  15. erraddsave.php,DedeCms教程:挑错管理
  16. 以太网协议 | ARP协议详解-ARP报文结构解析
  17. 明源软件诚聘.NET软件开发工程师
  18. 高仙商用清洁机器人落地北京环球影城,为室外清洁再添助力
  19. 双S曲线轨迹(详细推导)
  20. matlab sym是什么意思,matlab sym什么意思

热门文章

  1. 2022年Java项目课程目录
  2. Java实训项目4:GUI学生信息管理系统 - 项目结构图
  3. 【BZOJ2438】杀人游戏,tarjan缩点+简单的概率计算
  4. python调用pyd文件_如何将.pyd文件作为python模块导入?
  5. Intel Skylake (Client) 架构/微架构/流水线 (2) - 前端
  6. springboot2.x 从零到一(1、快速创建服务)
  7. android 碎片问题,Android碎片问题
  8. 谷歌为什登不上去github_安卓开源是假的,谷歌随时禁用,华为手机在海外市场已经快跌没了...
  9. catia螺纹孔在二维图上不显示_螺钉的螺纹是搓牙加工的,那么螺母的螺纹是怎么加工的呢...
  10. rust投递箱连接箱子_拆了的快递包装丢哪里?闵行试行24小时开放的网购包装回收箱...