简介:
循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
图示:
C语法实现:
#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
int data;
Node *prior;
Node *next;
}*List;
void init_list(List &flag){
flag = new Node;
flag->next = flag;
flag->prior = flag;
}
void insert_head_node(List &flag, List temp){
if(flag->prior == flag)//表明这之前链表只有标志节点
flag->prior = temp;
temp->next = flag->next;
flag->next->prior = temp;
flag->next = temp;
temp->prior = flag;
}
void insert_tail_node(List &flag, List temp){
if(flag->next == flag)//表明这之前链表只有标志节点
flag->next = temp;
temp->prior = flag->prior;
flag->prior->next = temp;
flag->prior = temp;
temp->next = flag;
}
void insert_head_value(List &flag, int e){
List temp = new Node;
temp->data = e;
insert_head_node(flag, temp);
}
void insert_tail_value(List &flag, int e){
List temp = new Node;
temp->data = e;
insert_tail_node(flag, temp);
}
void print_list(List &flag){
for(List i = flag->next; i != flag; i = i->next)
cout << i->data << " ";
}
int main(){
List flag;
init_list(flag);
//头插
for(int i = 0; i < 10; i++)
insert_head_value(flag, i);
print_list(flag);
cout << endl;
//尾插
for(int i = 0; i < 10; i++)
insert_tail_value(flag, i);
print_list(flag);
return 0;
}
区别于双标志节点的是,链表初始状态前后指针指向的都是自己。这里的插入只需要理解其中一种即可,因为对应的插入只不过换了个方向而已(可仔细比较上述插入的实现)。