题目:随机生成100个整数存入链表,整数范围在[-100, 100]之间,输出该链表。将该链表分为两个,一个存放所有负整数,另一个存放所有非负整数,输出这两个链表。
重点:产生一定范围内的随机数到链表;将一个链表按要求分为两个链表
1.定义一个链表结构体:
struct Node{
int Data;//该节点的数据
struct Node*next;//指向下一个节点的指针
};
2.创建一个链表:一定要注意链表是否带有头结点:
struct Node* Creat(){
struct Node*L;
L=(struct Node*)malloc(sizeof(struct Node));
L->Next=NULL;
return L;
}//创建带头空链表//
3.随机数生成函数rand:
使用该函数需要表头文件为:#include <stdlib.h>
- 语句定义:srand((int)time(NULL)); //初始化随机数发生器
- 函数:m=rand()%a; //随机生成 0~(a-1) 之间的一个数字
-
函数:m=rand()%a +b ; //随机生成 b~(a+b-1) 之间的一个数字,若执行一次则生成一个随机整数,执行n次就生成n个随机整数
m=rand()%201-100 产生-100到100之间的数字
4..将一个链表分为两个链表:
struct Node* Split(struct Node*L){
struct Node*L2;
struct Node*p,*q,*p2;
L2=malloc(sizeof(struct Node));
L2->Next=NULL;
p=L;
p2=L2;
while(p->Next!=NULL){
if(p->Next->Data>=0)
p=p->Next;
else{
q=p->Next;
p->Next=q->Next;
q->Next=p2->Next;
p2->Next=q;
p2=p2->Next;
}
}
return L2;
}
实验源代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct Node{
int Data;
struct Node*Next;
};
struct Node* creat(){
struct Node*L;
L=(struct Node*)malloc(sizeof(struct Node));
L->Next=NULL;
return L;
}
void Insert(struct Node*L,int n){
struct Node*p,*q;
p=L;
q=(struct Node*)malloc(sizeof(struct Node));
while(p->Next!=NULL&&p->Next->Data<n){
p=p->Next;
}
q->Data=n;
q->Next=p->Next;
p->Next=q;
}
struct Node* Split(struct Node*L){
struct Node*L2;
struct Node*p,*q,*p2;
L2=malloc(sizeof(struct Node));
L2->Next=NULL;
p=L;
p2=L2;
while(p->Next!=NULL){
if(p->Next->Data>=0)
p=p->Next;
else{
q=p->Next;
p->Next=q->Next;
q->Next=p2->Next;
p2->Next=q;
p2=p2->Next;
}
}
return L2;
}
void print(struct Node*L){
struct Node*p;
p=L->Next;
while(p!=NULL){
printf("%d ",p->Data);
p=p->Next;
}
}
int main(){
struct Node *L1,*L2;
L1=creat();
srand((int)time(NULL));
int i;
for(i=1;i<=100;i++){
Insert(L1,rand()%201-100);
}
print(L1);
printf("\n\n");
L2=Split(L1);
print(L1);
printf("\n\n");
print(L2);
return 0;
}