ps:本人大一新学数据结构,想写博客记录学习,文字全部为手打,代码为了保持正确性,全部来源书中。

 

线性表的顺序存储

表示方式:线性表的顺序存储结构可借助数组来表示,一堆数组的下标与元素在线性表中的序号相对应。

 

①元素类型可自己指定;

②下标要和顺序对应,如元素a1序号为1,在elem数组中下标为0;

③利用线性表的数据类型SeqList可直接定义变量,如:SeqList L;SeqList *L;

1.查找操作

(1)序号查找:找第i个元素,即直接执行语句L.elem[i-1];

(2)按内容查找:元素依次遍历,进行比较;

 

2.插入操作

判断插入位置是否合法,先将线性表的长度增加,再依次从前往后将元素位置调换,如原来总共i个元素,将i个元素的位置移到i+1,再将i-1移到i, ……

 

3.删除操作

判断线性表是否为空,若不为空,将被删除的元素指向一新变量,将第i+1个元素放到第i个元素的位置,后面依次这样做;

 

线性表的链式存储

从连接方式分类:单链表、循环链表、双链表;

1.单链表

 

          单链表

 

单链表的一个接点

①数据域用来存储结点的值;指针域有用来存储数据元素的直接后继的地址(位置)。

②单链表每个节点的存储位置防在其前驱结点的指针域中,但第一个结点无前驱,因设一个头指针指向第一个结点,最后一个结点无后继,设为“空”(NULL);

③头结点的数据域可为空,也可存放长度等信息;如果线性表为空表,则头结点的指针域为“空”;

 

LinkList与*Node同为结构指针类型,这两种类型等价。通常使用LinkList说明指针变量,强调头指针变量;而Node*用来定义指向单链表中结点的指针。

1.初始化单链表

 

注意:L是指向头结点的指针,*L相当于待初始化单链表的头指针变量;

2.建立单链表

(1)头插法建立单链表

 

(电脑画图有点费时间,直接把书上的搬过来)

注:使用头插法得到的单链表顺序与实际输入顺序相反,因此也称头插法建表为逆序建表法;

(2)尾插法建表

 

3.查找

(1)按序号查找

只能从链表的头指针出发,顺链域next逐个结点往下搜索;假设查找第i个元素,用指针指向当前扫描的结点,j做计数器,累计扫过的结点,当j==i时,指针所指为第i个结点。

 

(2)按值查找

  从单链表的头结点出发,顺链逐个将结点值与给定值比较。

 

4.插入

假设将元素e插入到单链表L中 ,分为三步:①查找:找到第i-1个结点并由指针指示;②申请:申请新结点s,将数据域的值置为e;③插入挂链:通过修改指针域将新结点插入单链表L 。

 

5.删除

①查找:通过计数方式找到第i-1个结点并由指针指示;②删除第i个结点并释放空间;

 

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!