数据结构-线性表-循环链表

循环单链表

#include <stdio.h>
#include <stdlib.h>

typedef struct LNode{  //定义单链表结构类型
    int 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;
    }
}

int main(void){
    return 0;
}

循环双链表

#include <stdio.h>
#include <stdlib.h>

typedef struct DNode {
    int data;
    struct DNode *prior, *next;
}DNode, *DLinklist;
//DLinklist强调是个链表
//DNode *强调是个结点

//初始化新的循环双链表
bool InitDlinkList(DLinklist &L){
    L = (DNode *)malloc(sizeof(DNode));  //分配一个头结点
    if(L==NULL){
        return false;  //内存不足,分配失败
    }
    L->prior = L;  //头结点的prior指向头结点
    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;
}

int main(void){
    return 0;
}

 

 

THE END
分享
二维码
海报
数据结构-线性表-循环链表
循环单链表 #include <stdio.h> #include <stdlib.h> typedef struct LNode{ //定义单链表结构类型 int data; //每个节点存放一个数据……