随机生成100个整数存入链表,整数范围在[-100, 100]之间,输出该链表。将该链表分为两个,一个存放所有负整数,另一个存放所有非负整数,输出这两个链表

题目:随机生成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>

  1. 语句定义:srand((int)time(NULL));     //初始化随机数发生器
  2. 函数:m=rand()%a;  //随机生成    0~(a-1) 之间的一个数字
  3. 函数: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;
}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值