#include<stdio.h>
#include<stdlib.h>
typedef struct RRlist{
int data;
RRlist *prior;
RRlist *next;
}RRlist,*RRRlist;
typedef struct sqlist{
RRRlist tail;
int length;
}sqlist,*ssqlist;
void Init_list(ssqlist H)
{
int count,data,i;
RRRlist p;
H->tail=0;
H->length=0;
printf("Scanf the mount of nodes\n");
scanf("%d",&count);
if(!count)
exit(0);
p=(RRRlist)malloc(sizeof(RRlist));
if(!p)
exit(0);
scanf("%d",&data);
p->data=data;
p->next=p;
p->prior=p;
H->tail=p;
H->length++;
for(i=1;i<count;i++)
{
p=(RRRlist)malloc(sizeof(RRlist));
if(!p)
exit(0);
scanf("%d",&data);
p->data=data;
p->next=H->tail;
p->prior=H->tail->prior;
H->tail->prior->next=p;
H->tail->prior=p;
H->length++;
}
}
void Insert_list(ssqlist H,int i,int e,int flag)//search from tail to tail
{
int j;
RRRlist p,q;
if(i<1||i>H->length+1)
exit(0);
p=(RRRlist)malloc(sizeof(RRlist));
if(!p)
exit(0);
p->data=e;
q=H->tail;
if(flag)
{
for(j=0;j<i-2;j++)
{
q=q->prior;
}
p->next=q;
p->prior=q->prior;
q->prior->next=p;
q->prior=p;
H->length++;
}
else
{
for(j=0;j<i;j++)
{
q=q->prior;
}
p->next=q->next;
p->prior=q;
q->next->prior=p;
q->next=p;
H->length++;
}
}
void display(ssqlist H,int dirction)//the direction stand for the search direction
{
int i;
RRRlist p;
p=H->tail;
printf("%d ",p->data);
if(dirction)
{
p=p->next;
while(p!=H->tail)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
else
{
p=p->prior;
while(p!=H->tail)
{
printf("%d ",p->data);
p=p->prior;
}
printf("\n");
}
}
void delet_list(ssqlist H,int i,int *e)
{
int j;
RRRlist p;
p=H->tail;
if(i<1||i>H->length)
exit(0);
for(j=0;j<i-1;j++)
{
p=p->prior;
}
*e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
if(p==H->tail)
{
H->tail=p->prior;
}
H->length--;
free(p);
}
int main()
{
int e;
sqlist H;
Init_list(&H);
display(&H,0);
Insert_list(&H,4,100,1);
display(&H,0);
delet_list(&H,4,&e);
display(&H,0);
printf("%d \n",e);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef st