头文件
#ifndef _LINK_H_
#define _LINK_H_
#include <stdlib.h>
typedef int data_t;
typedef struct link{
data_t data;
struct link *prior,*next;
}lk_node;
//创造
lk_node *create_lk();
//求长度
int len_lk(lk_node *head);
//插入
int insert_lk(lk_node *head,int pos,data_t data);
//删除
int delete_lk(lk_node *head,int pos);
//打印
int show_lk(lk_node *head);
//判空
int empty_lk(lk_node *head);
//清空
int clear_lk(lk_node *head);
//摧毁
int destory_lk(lk_node **head);
#endif
功能函数
#include <stdio.h>
#include "link.h"
//创造
lk_node *create_lk()
{
lk_node *head = (lk_node *)malloc(sizeof(lk_node));
if(NULL == head)
return NULL;
head->next = head;
head->prior = head;
return head;
}
//求长度
int len_lk(lk_node *head)
{
int len = 0;
lk_node *p = head;
while(p->next != head)
{
len++;
p = p->next;
}
return len;
}
//插入
int insert_lk(lk_node *head,int pos,data_t data)
{
lk_node *new = (lk_node *)malloc(sizeof(lk_node));
if(NULL == new){
return -1;
}
new->data = data;
lk_node *q=head;
if(pos >= 0){
pos = pos % (len_lk(head)+1);
while(pos--){
q = q->next;
}
}else{
pos = (-pos) % (len_lk(head)+1);
while(pos--){
q = q->prior;
}
}
new->next = q->next;
q->next->prior = new;
q->next = new;
new->prior = q;
return 0;
}
//删除
int delete_lk(lk_node *head,int pos)
{
lk_node *q = head;
lk_node *p;
if(pos >= 0)
{
pos = pos % (len_lk(head)+1);
while(pos--)
{
q = q->next;
}
}
else
{
pos = (-pos) % (len_lk(head)+1);
while(pos--)
{
q = q->prior;
}
}
//printf("******\n");
p = q->next;
q->next = p->next;
p->next->prior = q;
printf("删除---%d\n",p->data);
free(p);
return 0;
}
//打印
int show_lk(lk_node *head)
{
if(1 == empty_lk(head))
{
printf("head is empty\n");
return -1;
}
lk_node *p = head->next;
while(p != head)
{
printf("%d-->",p->data);
p = p->next;
}
printf("\n");
}
//判空
int empty_lk(lk_node *head)
{
return head->next == head;
}
//清空
int clear_lk(lk_node *head)
{
while(head->next != head)
{
delete_lk(head,0);
}
}
//摧毁
int destory_lk(lk_node **head)
{
clear_lk(*head);
free(*head);
*head = NULL;
return 0;
}