pcb结构链表_简单说说链表和一个应用实例
#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结构链表_简单说说链表和一个应用实例相关推荐
- python协同过滤调用包_简单的python协同过滤程序实例代码
本文研究的主要是python协同过滤程序的相关内容,具体介绍如下. 关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看 ...
- java城市链表_数据结构城市链表 1. 城市链表
[问题描述]将若干城市的信息 联合开发网 - pudn.com...
数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明: 1. 城市链表 [问题描述 ...
- c语言释放整个链表,最简单的链表删除第一个节点时释放内存的问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1 #include 2 #include "list.h" 3 4 int IsEmpty(List L) 5 { 6 r ...
- python游戏小项目简单_[简单学Python] 通过一个小游戏完成Python入门[2]变量和赋值...
变量和赋值 到这里,你已经成功地打印出了千寻的名字和卖身契.与此同时,千寻也成为了汤婆婆的工人,渐渐地,她忘记了自己是谁,遗失了自己"姓名"的信息. 那么,在信息纷繁的代码世界里, ...
- svn服务器搭建和使用_简单使用nodejs搭建一个静态服务器
前提:系统安装nodejs 搭建步骤 使用nodejs搭建服务器,简单的来说可以分为三步: require相应的模块 创建服务器 配置端口 启动服务器 必要的nodejs模块 以下模块都是以 var ...
- 运动场馆预定系统怎么做_简单教你做一个健身房预约小程序
一,开发手段 1:linux+php+mysql+微信小程序 服务器采用linux服务器,linux服务器保证了服务的安全性,以及稳定性,linux中搭载apache服务器,稳定性非常的好,毕竟是老牌 ...
- pcb结构链表_知乎
01 前言 Pierre-Alexandre Braeken在SecTor2016上做了一个很棒的演讲--HACK MICROSOFT BY USING MICROSOFT SIGNED BINARI ...
- pcb结构链表_第2章 2-1进程与PCB
2.1 进程的基本概念 1.关于程序执行顺序 1)引入前趋图 描述进程执行前后关系的图 有向无循环图(DAG) Pi结点:描述一个程序段.进程.或一条语句. 有向边"->": ...
- 链表list(链式存储结构实现)_数据结构知否知否系列之 — 线性表的顺序与链式存储篇(8000 多字长文)...
从不浪费时间的人,没有工夫抱怨时间不够. -- 杰弗逊 线性表是由 n 个数据元素组成的有限序列,也是最基本.最简单.最常用的一种数据结构. 作者简介:五月君,Nodejs Developer,热爱技 ...
最新文章
- microsoft word中在公式后插入可交叉引用的公式编号
- Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用
- jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
- elasticsearch2.2之javaApi
- ele-plus包的安装和使用
- 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!
- Ruby On Rails 安装手记
- 分享一个debian系统优秀的镜像源
- Git修改已提交的commit
- GBDT原理及利用GBDT构造新的特征-Python实现
- Qt学习笔记之GUI基本知识
- Spark Structured Steaming 聚合、watermark 以及 window操作,结合输出模式的研究总结
- 学信网如何通过证件编码查学历
- 渗透测试工程师基础入门
- erraddsave.php,DedeCms教程:挑错管理
- 以太网协议 | ARP协议详解-ARP报文结构解析
- 明源软件诚聘.NET软件开发工程师
- 高仙商用清洁机器人落地北京环球影城,为室外清洁再添助力
- 双S曲线轨迹(详细推导)
- matlab sym是什么意思,matlab sym什么意思
热门文章
- 2022年Java项目课程目录
- Java实训项目4:GUI学生信息管理系统 - 项目结构图
- 【BZOJ2438】杀人游戏,tarjan缩点+简单的概率计算
- python调用pyd文件_如何将.pyd文件作为python模块导入?
- Intel Skylake (Client) 架构/微架构/流水线 (2) - 前端
- springboot2.x 从零到一(1、快速创建服务)
- android 碎片问题,Android碎片问题
- 谷歌为什登不上去github_安卓开源是假的,谷歌随时禁用,华为手机在海外市场已经快跌没了...
- catia螺纹孔在二维图上不显示_螺钉的螺纹是搓牙加工的,那么螺母的螺纹是怎么加工的呢...
- rust投递箱连接箱子_拆了的快递包装丢哪里?闵行试行24小时开放的网购包装回收箱...