已知线性表中的元素以值递增有序排列,并以单链表做存储结构.试写一高效的算法,删除表中所有值大于mink 且小于 maxk

1个回答

  • 这个你看看.希望可能帮到你.

    #include

    #include

    #include

    typedef int ElemType;

    typedef struct LNode

    { ElemType data; /* 数据子域 */

    struct LNode *next; /* 指针子域 */

    }LNode; /* 结点结构类型 */

    LNode *L;

    /* 函数声明 */

    LNode *creat_L();

    void delete_L(LNode *L,int i); //返回值格式变为空

    /* 建立线性链表*/

    LNode *creat_L()

    {

    LNode *h,*p,*s; ElemType x;

    h=(LNode *)malloc(sizeof(LNode)); /* 分配头结点 */

    h->next=NULL;

    p=h;

    printf("输入一串数字(以-1结束):ndata= ");

    scanf("%d",&x); /* 输入第一个数据元素 */

    while( x!=-1) /* 输入-1,结束循环 */

    {

    s=(LNode *)malloc(sizeof(LNode)); /* 分配新结点 */

    s->data=x; s->next=NULL;

    p->next=s; p=s;

    printf("data= ");

    scanf("%d",&x); /* 输入下一个数据*/

    }

    return(h);

    } /* creat_L */

    /* 输出单链表中的数据元素*/

    void out_L(LNode *L)

    {

    LNode *p;

    p=L->next;

    printf("n数据是:");

    while(p!=NULL)

    {

    printf("%5d",p->data);

    p=p->next;

    }

    } /* out_link */

    /* 删除大于x小于y的值*/

    void delete_L(LNode *L,int a,int b)

    {

    LNode *p,*q;

    p=L;

    q=p;

    p=p->next;

    if(p==NULL) printf("ERROR:链表为空");

    while(p!=NULL)

    {

    if((p->data >a) && (p->data next=p->next;

    free(p);

    p=q->next;

    }

    else

    { q=p;

    p=p->next;

    }

    }

    } /* delete_L */

    void main()

    {

    int a,b;

    L=creat_L( ); out_L(L);

    printf("nn请输入你要删除的元素的范围x和y:n");

    scanf("%d%d",&a,&b);

    delete_L(L,a,b); out_L(L);

    printf("n");

    } /* main */

相关问题