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

2025-12-17 00:31:58
推荐回答(4个)
回答1:

  • #include/*2009/08/29完成*/  

  • #include/*删除递增线性表中值大于min且小于max的元素*/  

  • #include   

  • #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

  • {  

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

  • }  

回答2:

#include
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]     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   printf("%d ",a[i]);
 printf("\nmin max=");
 scanf("%d%d",&min,&max);
 dels(a,&n,min,max);
 printf("删除后的数:\n");
 for(i=0;i   printf("%d ",a[i]);
return 0;
}

回答3:

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

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

回答4:

//删除表中所有大于min而且小于max的元素
status DeleteItem(SeqList &L,int min,int max){
int i,j;
if(min >= max)
return ERROR;
for(i=0;i {
if(L.elem[i]>min && L.elem[i] {
for(j=i;j {
L.elem[j]=L.elem[j+1];
--L.length;
}
}
}
return OK;
}