单链表和双向链表
链表和数组的优缺点
**数组:**
优点:可以通过数组索引很快地访问数据元素,可以通过数组下标随机访问
缺点:删除和插入元素比较麻烦
**链表:**
优点:删除和插入元素方便快捷
缺点:只能够顺序访问,不能够随机访问
所以在需要可以随机访问元素的时候选择数组,而在需要经常删除和插入操作的时候
使用链表。另外数据存放数据时需要知道元素的个数,但是链表能够动态进行存储分
配。
单向链表和双向链表的结构
单向链表
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;