当前位置:   article > 正文

数据结构--线性表

数据结构--线性表


1.线性表的定义:

存在唯一的一个被称为“第一个”的数据元素

存在唯一的一个被称为“最后一个”的数据元素;

除第一个之外,集合中的每一个数据元素都只有一个前驱;

除最后一个之外,集合中的每一个数据元素都只有一个后继;

线性表是最简单最常用的一种线性表。

线性表分为顺序表和链表。

顺序表又分为定长顺序表和不定长顺序表。


2. 线性表的顺序表,顺序表的设计思想**

加入length和左端连续。

struct SqLsit

{

int elem[10];

int length;

}SqList;

同学们现在理解定长顺序表为什么要这样设计了吗?

结构示意图如下:


3.实现顺序表的操作(重点)

  1. //不定长顺序表的实现
  2. #include "sqlist.h"
  3. #include <stdio.h>
  4. #include <assert.h>
  5. //初始化
  6. void InitSqlist(PSQList ps)
  7. {
  8. assert(ps != NULL);
  9. if (ps == NULL)
  10. return;
  11. ps->length = 0;
  12. }
  13. static bool IsFul(PSQList ps)
  14. {
  15. return ps->length == 10;
  16. }
  17. //插入数据,在ps顺序表的pos位置插入val;
  18. bool Insert(PSQList ps, int pos, int val)
  19. {
  20. assert(ps != NULL);
  21. if (ps == NULL)
  22. return false;
  23. if (pos<0 || pos>ps->length || IsFul(ps))
  24. {
  25. return false;
  26. }
  27. //把数据移动到后面
  28. for (int i = ps->length - 1; i >= pos; i--)
  29. {
  30. ps->elem[i + 1] = ps->elem[i];
  31. }
  32. //插入数据
  33. ps->elem[pos] = val;
  34. //有效数据个数++;
  35. ps->length++;
  36. return true;
  37. }
  38. //判空
  39. bool IsEmpty(PSQList ps)
  40. {
  41. return ps->length == 0;
  42. }
  43. //在ps中查找第一个key值,找到返回下标,没有找到返回-1;
  44. int Search(PSQList ps, int key)
  45. {
  46. for (int i = 0; i < ps->length; i++)
  47. {
  48. if (key == ps->elem[i])
  49. return i;
  50. }
  51. return -1;
  52. }
  53. //删除pos位置的值
  54. bool DelPos(PSQList ps, int pos)
  55. {
  56. assert(ps != NULL);
  57. if (ps == NULL)
  58. return false;
  59. if (pos<0 || pos>=ps->length)
  60. {
  61. return false;
  62. }
  63. //将后面的数据前移
  64. for (int i = pos; i < ps->length - 1; i++)
  65. {
  66. ps->elem[i] = ps->elem[i + 1];
  67. }
  68. //有效数据个数--;
  69. ps->length--;
  70. return true;
  71. }
  72. //删除第一个val的值
  73. bool DelVal(PSQList ps, int val)
  74. {
  75. int i = Search(ps, val);
  76. if (i < 0)
  77. return false;
  78. return DelPos(ps, i);
  79. }
  80. //返回key的前驱下标,如果不存在返回-1;
  81. int GetPrio(PSQList ps, int key)
  82. {
  83. int i = Search(ps, key);
  84. if (i <= 0)//注意头没有前驱
  85. return -1;
  86. return i - 1;
  87. }
  88. //返回key的后继下标,如果不存在返回-1;
  89. int GetNext(PSQList ps, int key)
  90. {
  91. int i = Search(ps, key);
  92. if (i < 0 || i == ps->length - 1)//注意,尾没有后继
  93. return -1;
  94. return i + 1;
  95. }
  96. //输出
  97. void Show(PSQList ps)
  98. {
  99. assert(ps != NULL);
  100. if (ps == NULL)
  101. return;
  102. for (int i = 0; i < ps->length; i++)
  103. {
  104. printf("%d ", ps->elem[i]);
  105. }
  106. printf("\n");
  107. }
  108. //清空数据
  109. void Clear(PSQList ps)
  110. {
  111. ps->length = 0;
  112. }
  113. //销毁整个内存
  114. void Destroy(PSQList ps)
  115. {
  116. Clear(ps);
  117. }

数据结构的基本含义,简单来说,数据结构就是研究数据(不仅仅是数值的数据)之间的关系以及操作。顾名思义,就是数据的结构,只有你清楚了这些结构如何表现如何处理问题的,你就会发现,数据结构不仅仅拘泥于某一种语言,它更多的是一种思想理念,这样你在实际的编程中你才能运用它,使你的代码更加高效。因为你心中有它,心中有数据结构,那么只要能熟能生巧,你就会自然而然的想到使用它,从而你的代码就会更加高效。


本篇完!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/223525
推荐阅读
相关标签
  

闽ICP备14008679号