데이터 구조 - C 언어 - 이미 알 고 있 는 선형 표 의 요 소 는 값 으로 점점 증가 하고 질서 있 게 배열 되 며 단일 체인 표 로 저장 구 조 를 한다.효율 적 인 알고리즘 을 써 보 세 요. 표 의 모든 값 이 mink 보다 크 고 maxk 보다 작은 요 소 를 삭제 합 니 다.
2637 단어 데이터 매듭
#include
#include
#define OK 1
#define ERROR 0
#define LEN sizeof(struct LNode)
struct LNode{
int data;//
struct LNode *next;
};
typedef struct LNode LNode,* LinkList;
//
LinkList InitLNode(void){
LinkList head;
head = (LinkList)malloc(LEN);//
if(!head){
printf(" !
");
exit(ERROR);
}
head->data = 0;//
head->next = NULL;
return head;
}
//
int CreatLNode(LinkList head){
LinkList pleft,pright;
pleft = head;
pright = (LinkList)malloc(LEN);// pleft pright
printf(" :( -1 )
");
scanf("%d",&pright->data);
while(pright->data!=-1){
head->data++;// 1
pleft->next = pright;//pleft pright
pleft = pright;
pright = (LinkList)malloc(LEN);
scanf("%d",&pright->data);
}
pleft->next = NULL;
free(pright);//pright -1 pright
return OK;
}
//
int PrintLNode(LinkList head){
if(!head->next){
printf(" !
");
return ERROR;
}
LinkList p;//
p = head->next;// p = head
printf("
:
");
while(p){
printf("%d ",p->data);
p = p->next;
}
return OK;
}
//
int delLNode(LinkList head,int num){
if(!head->next){
printf(" !
");
return ERROR;
}
LinkList pleft,pright;
pleft = head;//
pright = head->next;//
while(pright->data!=num&&pright!=NULL){
pleft = pright;
pright = pright->next;
}
if(pright->data==num){
pleft->next = pright->next;//pleft = head
free(pright);
head->data--;// 1
}else{
printf("
!
");
}
return OK;
}
//
int delLink(LinkList head,float mink,float maxk){
LinkList pleft,pright;
pright = pleft = head->next;//
while(pright->data<=mink&&pright){
pleft = pright;
pright = pright->next;
}
if(!pright){
printf(" %g %g
",mink,maxk);
return ERROR;
}
while(pright->datadata > mink max
delLNode(head,pright->data);// pright free pright
pright = pleft->next;//
}
return OK;
}
main(){
LinkList head;
float mink,maxk;
head = InitLNode();
CreatLNode(head);
PrintLNode(head);
printf("
?
");
scanf("%f%f",&mink,&maxk);
delLink(head,mink,maxk);
PrintLNode(head);
}