编辑代码

#include  <stdio.h>
#include  <stdlib.h>

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) ;
}