2020.12.30 循环链表类C++实现

今天是2020.10.30,一个菜鸡小白的转型之路,今天个哦大家带来的是数据结构与算法中循环链表的实现,代码有点粗糙,没有考虑链表是空链表的情况,有缘人可自行下载修改,代码基础实现已经测试好了,另外说一句,查BUG真是爽啊。。。。今天有点累了,上了一天的课,代码不足之处,希望大家海涵。

#pragma once
#include<iostream>
using namespace std;
typedef int Element;
typedef struct Node
{

	Element Data;
	Node* next;
}Node;
//创建一个循环链表类出来,这是一个类,里面有一个循环链表
class ReLinklist
{
public:
	ReLinklist();//构造一个链表
	~ReLinklist();//销毁一个链表
	void Initlist();//初始化
	bool Listempty();//判空
	void Clearlist();//清空链表
	void Getlist(int i, Element* e);//获取第i个元素的值并返回出来
	int Locatelist(Element e);//查找元素
	void ListInser1t1();//头插
	void ListInser1t2();//尾插
	void Deletelist(int n);//删除
	int Listlength();//返回长度
	void Print();//遍历显示
	
	Node* List;
};

#include "ReLinklist.h"
//构造函数
ReLinklist::ReLinklist()
{
	//创建一个无意义头结点,并将其指针指向头结点
	this->List = new Node;
	this->List->next = this->List;
	this->List->Data = 12;
}
ReLinklist::~ReLinklist()
{
	Node* p=this->List->next;
	while (p!=this->List)
	{
		this->List->next = p->next;
		delete p;
		p = this->List->next;
	}
	delete this->List;
	this->List = NULL;
}
//初始化
void ReLinklist::Initlist()
{
	this->List = new Node;
	this->List->next = this->List;
	this->List->Data = 12;
}
void ReLinklist::Clearlist()//清空链表
{
	Node* p;
	Node* q;
	p = this->List->next;
	while (p)
	{
		q = p->next;
		delete p;
		p = q;
	}
	this->List->next = this->List;
}
bool ReLinklist::Listempty()//判空bool Listempty();//判空
{
	if (this->List->next == this->List)
	{
		return true;
	}
	else
	{
		return false;
	}
}
void ReLinklist::Getlist(int i, Element* e)//获取第i个元素的值并返回出来
{
	int count;//计数变量
	Node* p;
	p = this->List->next;
	count = 1;
	while ((p != this->List)&&(count<i))
	{
		p = p->next;
		count++;
	}
	*e = p->Data;
}
int  ReLinklist::Locatelist(Element e)//查找元素
{
	int count = 1;
	Node* p = this->List->next;
	while (p->Data != e && p->next != this->List)
	{
		p = p->next;
		count++;
	}
	return count;
}
void ReLinklist::ListInser1t1()//插入5个连续的数据,头插法
{
	for (int i = 0; i < 5; i++)
	{
		Node* p = new Node;
		p->Data = i + 1;
		p->next = this->List->next;
		this->List->next = p;
	}
	
}
void ReLinklist::ListInser1t2()//插入5连续的数据,尾插法
{
	//首先先到尾巴
	Node* p = this->List->next;
	while (p->next!= this->List)
	{
		p = p->next;
	}
	//p是尾结点了
	for (int i = 0; i < 5; i++)
	{
		Node* temp = new Node;
		temp->Data = i + 1;
		temp->next = this->List;
		p->next = temp;
		p = temp;
	}

}
void ReLinklist::Deletelist(int i)//删除
{
	int j = 1;
	Node* p = this->List->next;
	Node* q = p->next;
	while ((q->next!=this->List)&&(j<i-1))
	{
		p = q;
		q = p->next;
		++j;
	}
	p->next = q->next;
	delete q;


}
int ReLinklist::Listlength()//返回长度
{
	int count=1;
	Node* p;
	p = this->List->next;
	while (p->next!=this->List)
	{
		count++;
		p = p->next;
	}
	return count;
}
void ReLinklist::Print()//遍历显示
{
	Node* p = this->List->next;
	while (p!=this->List)
	{
		cout << p->Data << " ";
		p = p->next;
	}
	cout << endl;
}
#include<iostream>
#include"ReLinklist.h"
using namespace std;
void test01()
{
	ReLinklist v1;
	v1.Initlist();
	v1.ListInser1t1();
	v1.Print();
	cout << "-------------" << endl;
	cout <<v1.Listlength()<< endl;
	cout << "----------------" << endl;
	v1.ListInser1t2();
	v1.Print();
	cout << "-----------------" << endl;
	int e;
	v1.Getlist(3, &e);
	cout << e << endl;
	cout << "-------------" << endl;
	v1.Deletelist(3);
	v1.Print();
	cout << "-------" << endl;
}
int main()
{
	test01();
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值