单链表和双向链表

单链表和双向链表

链表和数组的优缺点

 **数组:**
 优点:可以通过数组索引很快地访问数据元素,可以通过数组下标随机访问
 缺点:删除和插入元素比较麻烦
 **链表:**
 优点:删除和插入元素方便快捷
 缺点:只能够顺序访问,不能够随机访问

 所以在需要可以随机访问元素的时候选择数组,而在需要经常删除和插入操作的时候
 使用链表。另外数据存放数据时需要知道元素的个数,但是链表能够动态进行存储分
 配。

单向链表和双向链表的结构

单向链表

typedef struct single 
{
  int data;
  struct single *next;
}

双向链表

typedef struct double
{
  int data;
  struct double *front;//前驱指针
  struct double *next;//后驱指针
}

单向链表操作(插入元素)//以后再添加删除操作

下面我将用图、文字和代码一起解释单向链表的插入元素操作(暂时只解释了在中间插入
元素操作,在末尾和开头插入元素也类似),因为用笔画比较快就用笔画了图,请勿介意。

原本的链表如下图所示,我们需要做的就是在这两个元素间插入一个元素。

在这里插入图片描述
相关代码:

head->next=NEXT;

在插入元素后的图片

在这里插入图片描述
如图所示,插入元素需要做的就是将head->next指针释放出来,再将它指向新元素,新元素New->next指针指向NEXT。

插入元素后的代码

New->next=NEXT;
head->next=New;

双向链表操作(插入元素)//以后再添加删除操作

下面将用图片、文字以及代码解释双向链表的插入元素操作

下图是未插入元素前的图片,我们需要做的就是在这两个元素间插入一个元素。
在这里插入图片描述
此时的相关代码:

head->next=NEXT;
NEXT->pre=head;

下图所示为插入元素后的图片
在这里插入图片描述
插入元素就是前一个元素的后驱指针head->next指向新元素,新元素的后驱指针New->next指向后一个元素,后一个的前驱指针NEXT->pre指向新元素,新元素的前驱指针New->pre指向前一个元素。

插入元素后的代码

head->next=New;
New->next=NEXT;
NEXT->pre=New;
New->pre=head;
发布了6 篇原创文章 · 获赞 2 · 访问量 125

猜你喜欢

转载自blog.csdn.net/qq_44931814/article/details/103245567
今日推荐