给定一个顺序存储的线性表,请设计一个算法,删除所有大于min而且小于max的元素。

如题所述

    #include<stdio.h>/*2009/08/29完成*/  

    #include<stdlib.h>/*删除递增线性表中值大于min且小于max的元素*/  

    #include <malloc.h>  

    #define ERROR 0  

    #define OK 1  

    typedef int ElemType;  

    typedef struct Node    

    {  

    ElemType data;  

    struct Node *next;  

    }Node,*LinkList;/*LinkList为结构指针类型,用来说明头指针变量*/  

    void initlinklist(LinkList *L)/*初始化单链表*/  

    {  

    *L=(LinkList)malloc(sizeof(Node));   

    (*L)->next=NULL;  

    }  

    void  Create(LinkList L)/*建立单链表*/  

    {  

    Node *s,*r;  

    char c;  

    int flag=1;   

    r=L;  

    while(flag)  

    {  

    scanf("%d",&c);  

    if(c!=-1)/*当输入-1时建表结束*/  

    {  

    s=(Node *)malloc(sizeof(Node));  

    s->data=c;  

    r->next=s;  

    r=s;  

    }  

    else  

    {  

    flag=0;  

    r->next=NULL;  

    }  

    }  

    }  

    int ListLength(LinkList L)  

    {  

    int i=0;  

    Node *p;  

    p=L->next;  

    while(p!=NULL)  

    {p=p->next;  

    i++;}  

    return i;  

    }  

    void print(LinkList L)  

    {  

    Node *p;  

    p=L->next;  

    printf("/nThe list value is:");  

    while(p!=NULL)  

    {  

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

    p=p->next;  

    }  

    }  

    void Delete_Between(LinkList L,int min,int max)  

    {  

    Node *p,*q;  

    if(max>=min)  

    {  

    p=L;  

    q=p->next;  

    while(q!=NULL&&q->data<=min)  

    {  

    p=q;  

    q=q->next;  

    }  

    while(q!=NULL&&q->data<max)  

    {  

    p->next=q->next;  

    free(q);  

    q=p->next;  

    }  

    }  

    }  

    void main()  

    {  

    LinkList LA;  

    Node *p,*q;  

    int i,len;  

    char min,max;  

    initlinklist(&LA);  

    printf("please Create the LA,using the -1 End(the increasing):/n");  

    Create(LA);  

    print(LA);  

    getchar();  

    printf("/nplease input the value of min and max:");  

    scanf("%d %d",&min,&max);  

    Delete_Between(LA,min,max);  

    print(LA);  

    }  

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
#include<stdio.h>
void dels(int a[],int *n,int min,int max)
{int i,j,k;
 for(i=j=k=0;i<*n;i++)
   if(a[i]>min&&a[i]<max)k++;
     else a[j++]=a[i];
 *n-=k;
}
int main()
{int a[14]={67,57,76,78,99,90,96,87,93,76,68,79,24,98};
 int max,min,n=14,i;
 printf("原有的数:\n");
 for(i=0;i<n;i++)
   printf("%d ",a[i]);
 printf("\nmin max=");
 scanf("%d%d",&min,&max);
 dels(a,&n,min,max);
 printf("删除后的数:\n");
 for(i=0;i<n;i++)
   printf("%d ",a[i]);
return 0;
}

本回答被网友采纳
第2个回答  2013-09-26

顺序表定义,建立和显示我就不写了,就写删除这个函数。

SeqList Delete(SeqList &L, int min, int max)
{
int count=L.Length;
for (int i=0; i<L.Length; i++)
{
if ((L.data[i]<max) && (L.data[i]>min))
{
L.data[i]=L.data[i+1];
count--;
}
}
L.Length=count;
        return L;
}

第3个回答  2013-09-26
//删除表中所有大于min而且小于max的元素
status DeleteItem(SeqList &L,int min,int max){
int i,j;
if(min >= max)
return ERROR;
for(i=0;i<L.length;i++)
{
if(L.elem[i]>min && L.elem[i]<max)
{
for(j=i;j<L.length;j++)
{
L.elem[j]=L.elem[j+1];
--L.length;
}
}
}
return OK;
}本回答被提问者采纳
相似回答