今天是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;
}