线性表之链表之循环链表(C++/C)
1.循环单链表
#include<stdio.h>
#include <stdlib.h>
#define ElemType int
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 isEmpty(LinkList L){
if (L->next==L)
return true;
else
return false;
}
//判断节点p是否为循环单链表的表尾节点
bool isTailNode(LinkList L,LNode *p){
if (p->next==L){
return true;
} else
return false;
}
2.双循环链表
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
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; //头结点的prior指向头结点
L->next=L; //头结点大的next指向头结点
return true;
}
//判断双链表是否为空
bool isEmpty(DLinkList L){
if (L->next==L)
return true;
else
return false;
}
3.静态链表
多用在 操作系统的文件管理 原理类似于 计算机组成原理或者操作系统中的 映射表
//初始化
typedef struct { ElemType data; ElemType next; }SLinkList[MaxSize];
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
#define ElemType int
typedef struct {
ElemType data;
ElemType next;
}SLinkList[MaxSize];
struct Node{
ElemType data;
ElemType next;
};
int main(){
struct Node x;
printf("sizeX=%d\n",sizeof(x));
struct Node a[MaxSize];
printf("sizeA=%d\n",sizeof(a));
SLinkList b;
printf("sizeB=%d\n",sizeof(b));
return 0;
}
说明:循环单链表和循环双链表的操作在大体上与单链表和双链表相似 差别在于 循环 不是一条路走到死 可以返回头结点的链表