已知线性表中的元素是无序的,元素序列为(10,40,50,90,60,78,99,86,43,21),实现一个删除表中所有值小于max但大于min的元素算法,该线性表以带头结点的单链表的存储结构
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
} LinkList;
LinkList *InitList() {
LinkList *head;
head=(LinkList *)malloc(sizeof(LinkList));
head->next=NULL;
return head;
}
LinkList *CreateList(int num[]) {
int i;
LinkList *head,*p,*r;
head=(LinkList *)malloc(sizeof(LinkList));
r=head;
for(i=0; i<10; i++) {
p=(LinkList *)malloc(sizeof(LinkList));
p->data=num[i];
r->next=p;
r=p;
}
r->next=NULL;
return head;
}
void printLinkList(LinkList *head) {
LinkList *p;
p = head->next;
while(p!=NULL) {
printf("%d ",p->data);
p = p->next;
}
}
void deleted(LinkList *head, int max,int min)
{
LinkList *p,*q,*r,*t,*f;
int i=0,j=0;
q=(LinkList *)malloc(sizeof(LinkList));
q->next=NULL;
p=head;
while(p!=NULL){
p=p->next;
j++;
}
p=head->next;
t=q;
for(;i<j-1;i++){
if(p->data<=min||p->data>=max){
r=(LinkList *)malloc(sizeof(LinkList));
r->data=p->data;
t->next=r;
t=r;
}
p=p->next;
}
t->next=NULL;
head->next=q->next;
}
int main(void) {
int max,min,temp;
int num[10]= {10,40,50,90,60,78,99,86,43,21};
LinkList *mylist;
scanf("%d %d",&max,&min);
if(min>max) {
temp=max;
max=min;
min=temp;
}
mylist=CreateList(num);
deleted(mylist,max,min);
printLinkList(mylist);
return 0;
}