静态链表 C语言描述
静态链表
1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标
2.最后一个的节点存放第一个由数值得下标
3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标
4.最后一个存储数据的节点的游标为0
静态链表主要是根据游标来遍历,以前没有指针用的思想
假如我要删除一个元素
图不多描述,自己画画就明白,然后代码部分。都有注释,
#include <stdio.h>
#define ElemType int
#define Status int
#define MAXSIZE 1000
typedef struct{
ElemType data;//数据
int cur; //游标
}Component,StaticLinkList[MAXSIZE]; //初始化静态链表
Status InitList (StaticLinkList space) //初始化静态链表等于初始化数组
{
int i;
for (i=;i<MAXSIZE-;i++)
space [i].cur=i+; //给所有节点的游标赋值 space[MAXSIZE-].cur =; //最后节点的游标为第一个元素
return ;
} //获取备用链表的第一个元素下标 (插入操作)
int Malloc_SLL(StaticLinkList space)
{
int i=space[].cur; //用i存储静态链 表第一个节点的游标
if(space[].cur) //如果首个的游标不为零,则最后一个节点的游标赋值给首节点
space[].cur=space[i].cur; //把下一个作为备用链表的第一个元素 return i; //要插入的下标
} //获得链表的长度
int ListLength(StaticLinkList L)
{
int j=; //用来计算
int i=L[MAXSIZE-].cur; //最后一个元素的游标,即首个存数据的节点的下标 while (i) //下标不为0执行循环
{
i =L[i].cur; //遍历知道最后一个存数据的节点的下标为0
j++;
}
return j;
} //在静态链表L中第i个元素之前插入新的数据元素e
Status ListInsert(StaticLinkList L,int i,ElemType e)
{
int j,k,l; k=MAXSIZE -;
if (i< || i>ListLength(L)+)
return -; j=Malloc_SLL(L); //获取备用链表的第一个元素下标
if (j) //如果静态链表不为空
{
L[j].data=e; //把值插入备用链表的第一个元素
for (l=;l<=i-;l++) //获取它之前元素的游标
k=L[k].cur; L[j].cur=L[k].cur; //把获取的游标赋值给新插入的游标
L[k].cur=j; //把新插入的节点的下标赋值给第i-1个节点的游标
return ; }
return -;
} //将下标为K的空闲节点回收到备用表中
void Free_SLL(StaticLinkList space,int k)
{
space[k].cur=space[].cur;
space[].cur=k;
} //删除在L中的第i个元素数据
Status ListDelete(StaticLinkList L,int i)
{
int j,k;
if (i< ||i>ListLength(L)) //超出长度,退出程序
return -; k=MAXSIZE -; //首个存数据的游标
for(j=;j<=i-;j++) //获取要删除元素的前一个游标
k=L[k].cur; j=L[k].cur;
L[k].cur=L[j].cur; Free_SLL(L,j);
return ;
}
插入原理:主要找到要插入的位置的前一个节点游标,将其游标改为插入元素的下标,插入元素的游标记录下一个的下标。
虽然静态链表被指针取代了,但是这思想要懂,以后开发的时候可以用到。
静态链表 C语言描述的更多相关文章
- 静态链表C语言数据结构
静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...
- 静态链表-C语言实现
1.静态链表是在没有指针的编程语言里对链表的一种实现2.主要是用数组模拟指针3.在这里,使用结构体使数组的每一个空间可以存储一个数据元素(date)和一个游标(cur),游标的作用相当于链表的指针域, ...
- 使用C语言描述静态链表和动态链表
静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 【数据结构】之链表(C语言描述)
链表是线性表的一种,是一种物理存储单元上非连续的存储结构,链表中的数据元素之间是通过指针链接实现的. 链表由一系列节点组成,节点可以在运行时动态的生成. 链表中国的每个节点分为两部分:一部分是存储数据 ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...
- 数据结构6: 静态链表及C语言实现
本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...
- C语言实现--静态链表的操作
1,我们研究数据结构的操作,第一要弄懂它的结构体表示(也就是结构体特点).第二要清楚它的初始化和撤销过程.对于静态链表首先分析它的特点:一是采用静态存储方式,二是没有指针.静态链表就是不用指针来表示链 ...
- 【数据结构】单链表&&静态链表详解和代码实例
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...
随机推荐
- 真假云主机,VPS资料集合
资料来源: http://www.west263.com/services/CloudHost/pk.asp?ads=baidu912 用"云里雾里"形容中小企业用户对云计算的理解 ...
- BIP_开发案例09_结合JavaCP通过BIP API输出报表dataprocess / rtfprocess / foprocess(案例)
20150814 Created By BaoXinjian
- Windows下编译使用Aliyun OSS PHP SDK
摘要: WIN环境下搭建Aliyun OSS PHP SDK编译运行环境.从PHP的安装逐步完成,SDK的编译运行.即使没有任何PHP基础,也能顺利完成. 安装环境:Win7 64 + PHP 5.6 ...
- Gradle学习
Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因. 这篇文章是 ...
- Python进阶04 函数的参数对应
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经接触过函数(function)的参数(arguments)传递.当时我们根 ...
- [Java] 字符流 Writer,输出字符数据PrintWriter
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- 解决 aspx 页面 TextBox 不支持 type="number"
安装 framework 4 并且打上补丁 Microsoft .NET Framework 4 可靠性更新 1 (KB2533523) https://www.microsoft.com/zh-cn ...
- BestCoder Round #79 (div.2)
1001.没推到题解那么细,枚举一下也可以.用通分可以避免小数精度问题. #include<iostream> #include<stdio.h> using namespac ...
- [SQL]开启事物,当两条插入语句有出现错误的时候,没有错误的就插入到表中,错误的语句不影响到正确的插入语句
begin transaction mustt insert into student values(,'kkk','j大洒扫','j','djhdjh') insert into student v ...
- javaSE学习博客与笔记
equals和==的区别 Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,do ...