算法与数据结构 单链表

1.随机产生10个100以内的整数建立一个单链表,显示该单链表中的数据元素;
2.随机产生10个100以内的整数建立一个单链表,显示该单链表中的数据元数,随机产生1-10中的任意整数 p ,在单链表中查找第 p 个元素,并显示该元素值;
3.随机产生10个100以内的整数建立一个单链表,显示该单链表中的数据元数,输入单链表中任一元素,查找并显示该元素在单链表中的位置;
4.随机产生10个100以内的整数建立一个单链表,显示该单链表中的数据元数,将55插入到第7个元素位置,并显示更新后的单链表;
5.随机产生10个100以内的整数建立一个单链表,显示该单链表中的数据元数,输入单链表中任一元素,删除该元素,并显示更新后的单链表;

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
template <typename DataType>
class Node {
public:
	DataType data;
	Node<DataType>* next;
};
template <typename DataType>
class LinkList {
private:
	Node<DataType>* first;
public:
	LinkList();
	~LinkList();
	void CreateList(int n);
	void Display();
	DataType GetElement(int pos);
	int LocateElement(DataType value);
	void Insert(int pos, DataType value);
	void Delete(DataType value);
};
template <typename DataType>
LinkList <DataType> ::LinkList()
{
	first = new Node<DataType>;
	first->next = nullptr;
}
template <typename DataType>
LinkList<DataType> ::~LinkList()
{
	Node<DataType>* current = first;
	while (current != nullptr)
	{
		Node <DataType>* newnode = current->next;
		delete current;
		current = newnode;
	}
}
template <typename DataType>
void LinkList <DataType>::CreateList(int n)
{
	srand((unsigned)time(0));
	for (int i = 0; i < n; i++)
	{
		Node <DataType>* newNode = new Node<DataType>;
		newNode->data = rand() % 100;
		newNode->next = first->next;
		first->next = newNode;
	}
}
template <typename DataType>
void LinkList<DataType>::Display()
{
	Node <DataType>* current = first->next;
	while (current != nullptr)
	{
		cout << current->data << '\t';
		current = current->next;
	}
	cout << endl;
}
template <typename DataType>
DataType LinkList<DataType>::GetElement(int pos)
{
	Node<DataType>* current = first->next;
	int count = 1;
	if (pos > 10 || pos < 0) return -1;
	while (current != nullptr && count < pos)
	{
		current = current->next;
		count++;
	}
	return current->data;
}
template <typename DataType>
int LinkList<DataType>::LocateElement(DataType value)
{
	Node <DataType>* current = first->next;
	int count = 1;
	while (current != nullptr)
	{
		if (current->data == value)
		{
			return count;
		}
		count++;
		current = current->next;
	}
	return count = -1;
}
template <typename DataType>
void LinkList<DataType>::Insert(int pos, DataType value)
{
	Node<DataType>* current = first, * s = nullptr;
	int count = 1;
	while (current != nullptr && count < pos)
	{
		current = current->next;
		count++;
	}
	if (current == nullptr) throw"插入位置错误";
	else
	{
		s = new Node<DataType>; s->data = value;
		s->next = current->next;
		current->next = s;
	}

}
template <typename DataType>
void LinkList<DataType>::Delete(DataType value)
{
	Node<DataType>* current = first, * s = nullptr, * p1 = nullptr;;
	DataType  x;

	while (current->data != value && current != nullptr)
	{
		p1 = current;
		current = current->next;
	}
	current = p1;


	s = current->next; x = current->data;
	current->next = s->next;

	delete s;
}
// 生成1~10的随机数的函数
int generateRandomNumber() {
	// 使用当前时间作为随机数生成器的种子,确保每次生成的随机数不同
	srand(static_cast<unsigned int>(time(nullptr)));

	// 生成一个1~10之间的随机数
	int randomNumber = rand() % 10 + 1;

	return randomNumber;
}
int main()
{
	LinkList<int> list;
	list.CreateList(10);
	list.Display();
	cout << "请输入要查找元素的下标" << endl;
	int c1;
	c1 = generateRandomNumber();
	cout << c1;
	if (list.GetElement(c1) != -1) cout << "元素" << list.GetElement(c1) << endl;
	cout << "请输入要查找位置的元素" << endl;
	int c2;
	cin >> c2;
	cout << "位置" << list.LocateElement(c2) << endl;
	cout << "请输入要插入元素的下标" << endl;
	int c3;
	cin >> c3;
	cout << "请输入要插入的元素" << endl;
	int c4;
	cin >> c4;
	list.Insert(c3, c4);
	list.Display();
	int c5;
	cout << "请输入要删除的元素" << endl;
	cin >> c5;
	list.Delete(c5);
	list.Display();
	return 0;
}

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值