2.3.4 循环链表
2.3.4 循环链表


typedef struct LNode{//定义单链表类型结构
ElemType data;//每个节点存放一个数据元素
struct LNode *next;//指针指向下一个结点
}LNode,*LinkList;
//初始化一个循环链接
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode));//分配一个头结点
if(L==NULL)//内存不足,分配失败
return false;
L->next = L;//头结点next指向头结点
return true;
}
//判断循环单链表是否为空
bool Empty(LinkList L){
if(L->next ==L)
return true;
else
return false;
}
//判断结点p是否为循环单链表的表尾结点
bool isTail(LinkList L,LNode *p){
if(p->next==L)
return true;
else
return false;
}



循环双链表

typedef struct DNode{
ElemType data;
struct DNode *prior,*next;
}DNode,*DLinklist;
//初始化空的双循环链表
bool InitDLinkList(DLinklist &L){
L=(DNode *)malloc(sizeof(DNode));//分配一个头结点
if(L==NULL)//内存不足,分配失败
return false;
L->prior=L;//头结点的poior指向头结点
L->next=L;//头结点的next指向头结点
return true;
}
void testDLinkList(){
//初始化循环双链表
DLinklist L;
InitDLinkList(L);
//....后续代码...
}
//判断循环双链表是否为空
bool Empty(DLinklist L){
if(L->next == L)
return true;
else
return false;
}
//判断结点p是否为循环双链表的标尾结点
bool isTail(DLinklist L,DNode *p){
if(p->next==L)
return true;
else
return false;
}

双链表的插入
//在p点之后插入s结点
bool InsertNextDNode(DNode *p,DNode *s){
s->next = p->next;//将结点*s插入到结点*p之后
p->next->prior = s;
s->prior = p;
p->next = s;
}

双链表的删除
//删除p的后继结点q
p->next = q->next;
q->next->prior = p;
free(q);


2.3.5 静态链表


用代码定义一个静态链表
#define MaxSize 10//静态链表的最大长度
struct Node{//静态链表结构类型的定义
ElemType data;//存储数据元素
int next;//下一个元素的数组下标
};
void testSLinkList(){
struct Node a[MaxSize];
//...后续代码...
}



简述基本操作的实现


2.3.6顺序表和链表的比较










浙公网安备 33010602011771号