随机生成10个元素,值为10以内,找到元素值为5的元素在这个下标后面插入一个元素值为11。
我认为这个题目主要分成两个部分
- 随机生成10个元素值为10以内
- 在5后面插入11
- 打印出来
我的想法是
- 一个单向循环链表来实现第一部分
- 一个单向链表实现第二部分
- 打印到终端
链表定义
struct randNum{
int data;
struct randNum* next;
};
做第一个要求并初始化随机数组
//初始化随机数组链表
randNum* initRandomArray(){
randNum *head,*temp,*tail;
head=tail=temp=new randNum;
for(int i=1;i<10;i++){
temp->data=i;
temp->next=new randNum;
temp=temp->next;
}
temp->data=10;
temp->next=head;//创建了一个1-10的单向循环链表
randNum *numHead,*numTemp;//创建了一个单向链表用于存储随机抽取的数
numHead=numTemp=new randNum;
tail=temp;
temp=head;
int num=10;
int move=rand()%num;
while(temp!=temp->next){
if(!move){//如果移动步数为0则将这个元素取出
num--;
move=rand()%num;//移动的最大步数会随着元素个数的减少而减少
tail->next=temp->next;
numTemp->data=temp->data;
delete(temp);
temp=tail->next;
numTemp->next=new randNum;
numTemp=numTemp->next;
continue;
}
tail=temp;
temp=temp->next;
move--;
}
numTemp->data=temp->data;
numTemp->next=new randNum;//返回了个排好序的单项链表
delete(temp);//做好最后的收尾
return numHead;
}
实现5后插入11的要求并打印
void cal(){
randNum* head=initRandomArray(),*temp,*tail;
tail=head;
temp=tail->next;
while(temp->next!=NULL){//实现5后插入11的要求
if(tail->data==5){
tail->next=new randNum;
tail->next->data=11;
tail->next->next=temp;
temp=temp->next;
break;
}
tail=temp;
temp=temp->next;
}
temp=head;
while(temp->next!=NULL){//循环打印出来
cout<<"-"<<temp->data<<"-";
temp=temp->next;
}
cout<<endl;
}
main函数
int main(){
srand(time(NULL));//初始化一下随机函数,不然rand()得出的结果相等
cal();
return 0;
}
执行情况
网友评论