已知线性表中的元素以值递增有序排列,并以单链表做存储结构.试写一高效的算法,删除表中所有值大于mink 且小于 maxk
收藏:
0
点赞数:
0
评论数:
0
1个回答

这个你看看.希望可能帮到你.

#include

#include

#include

typedef int ElemType;

typedef struct LNode

{ ElemType data; /* 数据子域 */

struct LNode *next; /* 指针子域 */

}LNode; /* 结点结构类型 */

LNode *L;

/* 函数声明 */

LNode *creat_L();

void delete_L(LNode *L,int i); //返回值格式变为空

/* 建立线性链表*/

LNode *creat_L()

{

LNode *h,*p,*s; ElemType x;

h=(LNode *)malloc(sizeof(LNode)); /* 分配头结点 */

h->next=NULL;

p=h;

printf("输入一串数字(以-1结束):ndata= ");

scanf("%d",&x); /* 输入第一个数据元素 */

while( x!=-1) /* 输入-1,结束循环 */

{

s=(LNode *)malloc(sizeof(LNode)); /* 分配新结点 */

s->data=x; s->next=NULL;

p->next=s; p=s;

printf("data= ");

scanf("%d",&x); /* 输入下一个数据*/

}

return(h);

} /* creat_L */

/* 输出单链表中的数据元素*/

void out_L(LNode *L)

{

LNode *p;

p=L->next;

printf("n数据是:");

while(p!=NULL)

{

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

p=p->next;

}

} /* out_link */

/* 删除大于x小于y的值*/

void delete_L(LNode *L,int a,int b)

{

LNode *p,*q;

p=L;

q=p;

p=p->next;

if(p==NULL) printf("ERROR:链表为空");

while(p!=NULL)

{

if((p->data >a) && (p->data next=p->next;

free(p);

p=q->next;

}

else

{ q=p;

p=p->next;

}

}

} /* delete_L */

void main()

{

int a,b;

L=creat_L( ); out_L(L);

printf("nn请输入你要删除的元素的范围x和y:n");

scanf("%d%d",&a,&b);

delete_L(L,a,b); out_L(L);

printf("n");

} /* main */

点赞数:
0
评论数:
0
相关问题
关注公众号
一起学习,一起涨知识