静态链表
1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标
2.最后一个的节点存放第一个由数值得下标
3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标
4.最后一个存储数据的节点的游标为0

静态链表主要是根据游标来遍历,以前没有指针用的思想

假如我要删除一个元素

图不多描述,自己画画就明白,然后代码部分。都有注释,

  1. #include <stdio.h>
  2. #define ElemType int
  3. #define Status int
  4. #define MAXSIZE 1000
  5. typedef struct{
  6. ElemType data;//数据
  7. int cur; //游标
  8. }Component,StaticLinkList[MAXSIZE];
  9.  
  10. //初始化静态链表
  11. Status InitList (StaticLinkList space) //初始化静态链表等于初始化数组
  12. {
  13. int i;
  14. for (i=;i<MAXSIZE-;i++)
  15. space [i].cur=i+; //给所有节点的游标赋值
  16.  
  17. space[MAXSIZE-].cur =; //最后节点的游标为第一个元素
  18. return ;
  19. }
  20.  
  21. //获取备用链表的第一个元素下标 (插入操作)
  22. int Malloc_SLL(StaticLinkList space)
  23. {
  24. int i=space[].cur; //用i存储静态链 表第一个节点的游标
  25. if(space[].cur) //如果首个的游标不为零,则最后一个节点的游标赋值给首节点
  26. space[].cur=space[i].cur; //把下一个作为备用链表的第一个元素
  27.  
  28. return i; //要插入的下标
  29. }
  30.  
  31. //获得链表的长度
  32. int ListLength(StaticLinkList L)
  33. {
  34. int j=; //用来计算
  35. int i=L[MAXSIZE-].cur; //最后一个元素的游标,即首个存数据的节点的下标
  36.  
  37. while (i) //下标不为0执行循环
  38. {
  39. i =L[i].cur; //遍历知道最后一个存数据的节点的下标为0
  40. j++;
  41. }
  42. return j;
  43. }
  44.  
  45. //在静态链表L中第i个元素之前插入新的数据元素e
  46. Status ListInsert(StaticLinkList L,int i,ElemType e)
  47. {
  48. int j,k,l;
  49.  
  50. k=MAXSIZE -;
  51. if (i< || i>ListLength(L)+)
  52. return -;
  53.  
  54. j=Malloc_SLL(L); //获取备用链表的第一个元素下标
  55. if (j) //如果静态链表不为空
  56. {
  57. L[j].data=e; //把值插入备用链表的第一个元素
  58. for (l=;l<=i-;l++) //获取它之前元素的游标
  59. k=L[k].cur;
  60.  
  61. L[j].cur=L[k].cur; //把获取的游标赋值给新插入的游标
  62. L[k].cur=j; //把新插入的节点的下标赋值给第i-1个节点的游标
  63. return ;
  64.  
  65. }
  66. return -;
  67. }
  68.  
  69. //将下标为K的空闲节点回收到备用表中
  70. void Free_SLL(StaticLinkList space,int k)
  71. {
  72. space[k].cur=space[].cur;
  73. space[].cur=k;
  74. }
  75.  
  76. //删除在L中的第i个元素数据
  77. Status ListDelete(StaticLinkList L,int i)
  78. {
  79. int j,k;
  80. if (i< ||i>ListLength(L)) //超出长度,退出程序
  81. return -;
  82.  
  83. k=MAXSIZE -; //首个存数据的游标
  84. for(j=;j<=i-;j++) //获取要删除元素的前一个游标
  85. k=L[k].cur;
  86.  
  87. j=L[k].cur;
  88. L[k].cur=L[j].cur;
  89.  
  90. Free_SLL(L,j);
  91. return ;
  92. }

插入原理:主要找到要插入的位置的前一个节点游标,将其游标改为插入元素的下标,插入元素的游标记录下一个的下标。

虽然静态链表被指针取代了,但是这思想要懂,以后开发的时候可以用到。

静态链表 C语言描述的更多相关文章

  1. 静态链表C语言数据结构

    静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...

  2. 静态链表-C语言实现

    1.静态链表是在没有指针的编程语言里对链表的一种实现2.主要是用数组模拟指针3.在这里,使用结构体使数组的每一个空间可以存储一个数据元素(date)和一个游标(cur),游标的作用相当于链表的指针域, ...

  3. 使用C语言描述静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...

  4. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  5. 【数据结构】之链表(C语言描述)

    链表是线性表的一种,是一种物理存储单元上非连续的存储结构,链表中的数据元素之间是通过指针链接实现的. 链表由一系列节点组成,节点可以在运行时动态的生成. 链表中国的每个节点分为两部分:一部分是存储数据 ...

  6. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  7. 数据结构6: 静态链表及C语言实现

    本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...

  8. C语言实现--静态链表的操作

    1,我们研究数据结构的操作,第一要弄懂它的结构体表示(也就是结构体特点).第二要清楚它的初始化和撤销过程.对于静态链表首先分析它的特点:一是采用静态存储方式,二是没有指针.静态链表就是不用指针来表示链 ...

  9. 【数据结构】单链表&&静态链表详解和代码实例

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...

随机推荐

  1. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

  2. TMS320C54x系列DSP的CPU与外设——第3章 存储器

    第3章  存储器 本章介绍了TMS320C54x DSP存储器的构成和操作.一般来说,C54x器件共有192K 16位字的存储窨,这个空间分成3个专用的部分:64K字程序.64K字数据和64K字I/O ...

  3. 网页爬虫--scrapy入门

    本篇从实际出发,展示如何用网页爬虫.并介绍一个流行的爬虫框架~ 1. 网页爬虫的过程 所谓网页爬虫,就是模拟浏览器的行为访问网站,从而获得网页信息的程序.正因为是程序,所以获得网页的速度可以轻易超过单 ...

  4. PLSQL_性能优化系列01_Oracle Index索引

    2014-06-01 Created By BaoXinjian

  5. BestCoder Round #86 部分题解

    Price List 题意: 有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了? 题解: 就是求和,最后如果大于和就输出1,否则0. 代码: #include <bits/std ...

  6. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  7. RabbitMQ介绍2 - AMQP协议

    这一节介绍RabbitMQ的一些概念,当然也是AMQP协议的概念.官方网站也有详细解释,包括协议的命令: http://www.rabbitmq.com/tutorials/amqp-concepts ...

  8. centos更改默认语言

    centos7以下版本: vim /etc/sysconfig/i18n 7以上版本:

  9. 让Chrome可以修改字体

    在chrome地址栏输入chrome://flags/ , 然后将"停用DirectWrite Windows"改为停用 , 这样自定义的字体就可以生效了.

  10. 常见数组&字符串API及其应用场景总结

    数组API: String(arr):将arr中每个元素转化为字符串,逗号连接     场景:用于鉴别数据有没有修改等. ps:String是万能的   toString 只能转换除null和unde ...