数据结构:线性表的应用实现

题目:

(1)用随机函数生成10个3位整数(100~999),把这些整数存于单链表中,然后读入一个整数,以该值为基准把单链表分割为两部分,所有小于该值的结点排在大于或等于该值的结点之前。

思路:

先建立链表,将数据输入链表,再根据分割值,建立min和max链表,大于分割值部分添加入max链表,其余加入min链表,再将min链表的尾部连接max的首即可

源代码:

#include "pch.h"
#include <iostream>
#include<ctime>
using namespace std;
struct List//链表
{
	int data;
	List *next;
};
void init(List *&L)//初始化链表
{
	L = new List;
	L->next = NULL;
}
void push(List *&L, int data)//存入数据
{
	List *tmp = new List;
	tmp->data = data;
	tmp->next = NULL;//建立节点
	List*p = L;
	while (p->next)
	{
		p = p->next;
	}
	p->next = tmp;//插入到链表末尾
}
List* partion(List *&L, int data)//分割链表
{
	if (L == NULL || L->next == NULL) return L;
	List* min, *max;//建立小于data和大于data的两个链表
	init(min);
	init(max);
	List*pmin = min;
	List*pmax = max;
	L = L->next;
	while (L)//遍历链表
	{
		if (L->data < data) {//如果小于data,则放进min链表
			pmin->next = L;
			pmin = pmin->next; 
			L = L->next;
			pmin->next = NULL;
		}
		else//否则,放进max链表
		{
			pmax->next = L;
			pmax = pmax->next;
			L = L->next;
			pmax->next = NULL;
		}
		
	}
	pmin->next = max->next;//最后将min链表的尾部连接max的首
	return min;//返回min链表
}
int main()
{
	srand(unsigned int(time(0)));
	List *L;
	init(L);
	for (int i = 0; i < 10; i++)//将数据插入链表
	{
		int data = rand() % 899 + 100;
		push(L, data);
		cout << "随机数" << data << "已插入到链表尾部\n";
	}
	cout << "请输入一个整数分割列表:";
	int data;
	cin >> data;//输入分割值
	L=partion(L, data);//分割链表
	List*p = L->next;
	cout << "分割后链表顺序如下所示:\n";
	for(int i=1;i<=10;i++)//输出分割后链表
	{
		cout <<"第"<<i<<"个数为:"<< p->data << endl;
		p = p->next;
	}
}

效果图展示:

在这里插入图片描述

发布了330 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43981315/article/details/103914182
今日推荐