本题要求实现一个带头结点的双向循环链表操作集。
函数接口定义:
typedef int dataType;
typedef struct _node
{
dataType data;
struct _node *prev;//指向前驱的指针
struct _node *next;//指向后继的指针
}node;
typedef node* List;
List create_list();//创建一个空的循环链表,返回指向头节点的指针。
void insert(List L, dataType x);//用尾插法向链表L中插入数据域等于x的结点
bool is_empty(List L);//如果链表为空,则返回true,否则返回false。
void traverse(List L);//顺序遍历链表L。输出所有结点的数据域。如果链表为空则输出NULL
void traverse_back(List L);//逆序遍历链表L。输出所有结点的数据域。如果链表为空则输出NULL
node* search(List L, dataType x);//返回第1个指向数据域等于x的结点的指针。如果没有则返回NULL。
void delete_node(List L, node* p);//删除指针p指向的结点。调用者保证p是合法的。
void remove_node(List L, dataType x);//删除链表L中所有数据域等于x的结点
void make_empty(List L);//使链表L成为一个空链表
void destroy_list(List L);//销毁链表L
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int dataType;
typedef struct _node
{
dataType d