有序链表的动态查找
一个应用动态查找的示意程序,程序输入整数建立有序链表,然后逐一输入要删除结点的键值,将相应结点从链表中删除,直至链表为空结束。
程序:
#include "stdio.h"
#include "stdlib.h"
typedef struct node {
int key;
struct node *next;
}NODE;
int search(NODE *h,int key,NODE **p,NODE **q)
{
NODE *u=NULL,*v=h;
for(;v!=NULL&&v->key<key;u=v,v=v->next)
*p=u;*q=v;
return v!=NULL&&v->key==key;
}
void write(NODE *h)
{
while(h!=NULL)
{ printf("%4d",h->key);
h=h->next;}
}
void main()
{
int t,n,i;
NODE *x,*y,*h=NULL,*p;
printf("enter n.\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&t);
p=(NODE*)malloc(sizeof(NODE));
p->key=t;p->next=NULL;
search(h,t,&x,&y);
if(x==NULL){
p->next=h;h=p;
}
else {
p->next=x->next;x->next=p;
}
}
write(h);
do{
printf("enter delete key.\n");
scanf("%d",&t);
if(search(h,t,&x,&y)){
if(x==NULL)h=y->next;
else x->next=y->next;
free(h);
write(h);
}
else printf("Not found!\n");
}while(h);
printf("the linked list is empty!\n");
}
编译,连接都顺利通过,就是运行测试不正常。弹出[关闭调试窗口]的提示
请大家帮测试看看,问题出在哪里?
问题点数:0、回复次数:1Top
1 楼bahanzo1(绯雨流烟)回复于 2003-08-04 09:25:45 得分 0
楼主你的search(h,t,&x,&y);
没有问题么?Top



