静态链表
让数组的元素都是由两个数据域组成,data
和cur
。数组的每个下标都对应一个data
和一个cur
。data用来存放数据元素,cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。
这种用数组描述的链表叫做静态链表
数组第一个和最后一个元素作为特殊元素处理,不存数据。
通常把未被使用的数组元素称为备用链表
数组第一个元素,即下标为0 的元素的 cur 就存放备用链表的第一个结点的下标
最后一个元素的 cur 则存放第一个有数值的元素的下标,相当于单链表的头结点的作用,整个链表为空时,则为 0
静态链表优缺点
循环链表
将单链表中的终端结点的指针由 空指针 改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,也就是循环链表
解决从当中任意一个结点出发,访问到链表的全部结点
双向链表
在单链表的每个结点中,在设置一个指向其前驱结点的指针域
p->next->prior = p = p->prior->next
插入操作
s ->prior = p;
s->next = p->next;
p->next->prior = s
p->next = s
删除操作
p->prior = p->next
p->next->prior = p->prior
free(p)
栈与队列
栈的定义
栈(stack)是限定仅在表尾进行插入和删除操作的线性表
允许插入和删除的一段称为栈顶(top)
,另一端称为栈底(bottom)
,不含任何数据结构的栈称为空栈
栈又称为后进先出(Last In First Out)
的线性表,简称为LIFO结构
栈的插入操作,叫做进栈(压栈,入栈)
栈的删除操作,叫做出栈(弹栈)