因为有梦想,所以才会有成功!
我好像看错了。
使用链表解法如下:
#include <stdlib.h>
#include "time.h"
/*产生0至9组成的十位数 链表法*/
struct NODE
{
int data;
struct NODE *next;
};
struct NODE *mydelete(struct NODE *H,int x);
main()
{
int i,j,temp,length;
int num[10];
struct NODE *h,*pr,*pt;
for(i=0;i<10;i++)
{
pt=(struct NODE *)malloc(sizeof(struct NODE ));
pt->next=NULL;
pt->data=i; /*申请空间并附值*/
if(i==0)
{
h=pt;
pr=pt;
}
else
{
pr->next=pt;
pr=pt;
} /*建立链表*/
}
srand(time(NULL));
for(i=0;i<10;i++)
{
pr=h;
length=rand()%(10-i);/*链表长度内选值*/
for(j=0;j<length;j++)
pr=pr->next;
num[i]=pr->data;
if(num[0]==0)
{
i--;
continue; /*处理第一位为0情况*/
}
h=mydelete(h,num[i]);/*删除节点*/
printf("%d",num[i]);
}
getch();
}
/*
函数功能:删除指定数据
函数如口参数:链表头指针,待删数据
函数返回值:链表头指针
*/
struct NODE *mydelete(struct NODE *H,int x)
{
struct NODE *p,*temp;
if(H->data==x)
{
temp=H;
H=H->next;
temp->next=NULL;
}/*处理在头的情况*/
else
{
for(p=H;p!=NULL;p=p->next)
{
if(p->next->data==x)
{
temp=p->next;
p->next=temp->next;
temp->next=NULL;
break;
}/*处理中间请况*/
}
}
free(temp);
return(H);/*返回链表头指针*/
}