typedef struct Node
{
struct Node *previou ;
int data ;
struct Node *next ;
} N ;
void sort(N *first)
{
N *p=first;
N *q=first->next;
p->next=NULL;
while(q!=NULL)
{
N *s=q->next;
N *r=p;
if(p->data <= q->data)
{
q->next=p->next;
p->next=q;
q->previou=p;
p=q;
}
else if(p->data > q->data)
{
N *r=p;
if(p->previou==NULL)
{
p->previou=q;
q->next=p;
q->previou=p->previou;
p=r;
}
if(p->previou!=NULL)
{
p=p->previou;
}
}
q=s;
p=r;
}
return first;
}
void output1(N *first)
{
N *p = first ;
while(p->next=NULL)
{
printf("%d->", p->data) ;
p = p->next ;
}
printf("%d\n",p->data);
}
void output2(N *last)
{
N *p = last ;
while(p->previou!=NULL)
{
printf("%d->",p->data) ;
p = p->previou ;
}
printf("%d\n",p->data);
}
void dele (N *first,int n)
{
N *p=first;
if(p==NULL)
{
printf(" node end\n");
return 0;
}
while(p!=NULL)
{
if(p->data==n)
{
p->previou->next=p->next;
p->next->previou=p->previou;
free(p);
}
else if(p->data!=n)
{
p=p->next;
}
}
}
void inter(N *first, int n)
{
N *p=first;
inew= (N *)malloc(sizeof(N));
inew->data=n;
inew->next=NULL;
inew->previou=NULL;
while(p!=NULL)
{
if(p->data <= n )
{
p=p->next;
}
if(p->data > n )
{
inew->next=p->next;
p->next->previou=inew;
inew->previou=p->previou;
p->previou->next=inew;
}
if(p==NULL)
{
p->next=inew;
inew->previou=p;
}
}
void inquire(N *first, n)
{
int i=1;
int j=1;
N *p=first;
N *q=last;
while(p!=NULL)
{
if(p->data!=n)
{
p=p->next;
i++;
}
while(q!=NULL)
{
if(q->data!=n)
{
q=q->previou;
j++;
}
if(p!=NULL)
{
printf("结果;%d位与正向链表的第%d位,位于反向链表第%d位",n,i,j);
}
}
main(void)
{
N *first = NULL, *last = NULL, *mid = NULL ;
int n ;
printf("输入:%d位整数\n") ;
scanf("%d", &n) ;
if (0 == n)
{
printf("节点数量为零,退出程序") ;
exit(0) ;
}
printf("生成:\n") ;
first = (N *)malloc(sizeof(N)) ;
scanf("%d", &first->data) ;
first->previou = NULL ;
first->next = NULL ;
last = first ;
for (int i = 1 ; i < n ; i++)
{
mid = (N *)malloc(sizeof(N)) ;
scanf("%d", &mid->data) ;
last->next = mid ;
mid->previou = last ;
last = mid ;
}
last->next = NULL ;
sort(first);
printf("正向输出:\n") ;
output1(first) ;
printf("反向输出:\n") ;
output2(last) ;
int j;
printf("插入:");
scanf("%d",&j);
inter(first,j);
printf("正向输出:\n") ;
output1(first) ;
printf("反向输出:\n") ;
output2(last) ;
int k;
printf("删除:");
scanf("%d",&k);
dele(frist,k);
printf("正向输出:\n") ;
output1(first) ;
printf("反向输出:\n") ;
output2(last) ;
int m;
printf("查询:");
scanf("%d",&m);
inquire(frist,m);
printf("正向输出:\n") ;
output1(first) ;
printf("反向输出:\n") ;
output2(last) ;
}