循环链表
太晚了先贴代码:
.h:
#ifndef CIR_LINKLIST_H_INCLUDED
#define CIR_LINKLIST_H_INCLUDED
#include "Cir_LinkList.h"
/** 循环链表
* 将单链表的头指针换成尾指针
* 头尾相连
* 头结点要保留呀~
* 头结点:头指针指向的结点,数据域为空
* 首元结点:链表第一个在数据域存了数据的结点
*/
struct Cir_Node{
int data;//数据域
struct Cir_Node *next;//指针域
};
class Cir_LinkList{
private:
Cir_Node *Head;
int length;
public:
Cir_LinkList();//构造函数
//~ Cir_LinkList();//析构函数
bool Cre_Cir_LinkList_H(int n);//前插法创建循环链表
bool Cre_Cir_LinkList_R(int n);//后插法创建循环列表
void Insert_Cir_LinkList(int i, int elem);//第i个结点上插入元素elem
bool Delete_Cir_LinkList(int i);//删除第i个结点中的元素
/*bool Delete_Cir_LinkList_e(int elem);//删除elem元素*/
void Display();//遍历
void Display(int num);//输出循环中前num个数
};
#endif // CIR_LINKLIST_H_INCLUDED
.cpp:
#include "Cir_LinkList.h"
#include <iostream>
using namespace std;
//构造函数
Cir_LinkList::Cir_LinkList(){
Head = new Cir_Node;
Head->next = nullptr;
length = 0;
}
//前插法创建链表
bool Cir_LinkList::Cre_Cir_LinkList_H(int n){
Cir_Node *last;
Cir_Node *p = Head;
for(int j=1; j<=n; j++){
Cir_Node *temp = new Cir_Node;
cout << "请输入倒数第" << j << "个结点的元素:" << endl;
cin >> temp->data;
if(j == 1 && temp){
last = temp;
}
temp->next = p->next;
p->next = temp;
length++;
}
last->next = Head;//首尾连接
return true;
}
//后插法创建链表
bool Cir_LinkList::Cre_Cir_LinkList_R(int n){
Cir_Node *p = Head;
//Cir_Node *last;
for(int i=1; i<=n; i++){
Cir_Node *temp = new Cir_Node;
cout << "请输入第" << i << "个结点的元素:"<<endl;
cin >> temp->data;
p->next = temp;
p = temp;
length++;
}
p->next = Head;//首尾连接
return true;
}
//插入
void Cir_LinkList::Insert_Cir_LinkList(int i, int elem){
Cir_Node *p = Head;
Cir_Node *temp = new Cir_Node;
temp->data = elem;
for(int j=1; j<i; j++){
p = p->next;
j--;
}
temp->next = p->next;
p->next = temp;
length++;
}
//删除第i个结点中的元素
bool Cir_LinkList::Delete_Cir_LinkList(int i){
if(i>length){
cout<< "DATA ERRER" << endl;
return false;
}else{
Cir_Node *p = Head;
Cir_Node *temp;
for(int j=1; j<i; j++){
if(p==Head){
cout << "到这里了" << endl;
p = p->next;
}else{
// cout << j << "*********" << endl;
p = p->next;
}
}
temp = p->next;
cout << temp->data <<endl;
p->next = temp->next;
length--;
delete temp;
return true;
}
}//当我写完这个 我也疯球了
//遍历
void Cir_LinkList::Display(){
Cir_Node *p = Head;
for(int i=1; i<=length; i++){
if(p==Head){
//cout << "到这里了" << endl;
p = p->next;
i--;
}else{
cout << p->data <<ends;
p = p->next;
}
}
}
//循环中的num个
void Cir_LinkList::Display(int num){
Cir_Node *p = Head;
for(int i=1; i<=num; i++){
if(p==Head){
//cout << "到这里了" << endl;
p = p->next;
i--;
cout <<endl;
}else{
cout << p->data <<ends;
p = p->next;
}
}
}
main:
#include <iostream>
#include "Cir_LinkList.h"
using namespace std;
int main()
{
cout << "Hello world!" << endl;
Cir_LinkList cl;
//cl.Cre_Cir_LinkList_H(5);
cl.Cre_Cir_LinkList_R(5);
//cout<<cl.Head->next->next->data <<endl;
//cout<<cl.Head->data <<endl;
//cl.Insert_Cir_LinkList(1, 91);
cl.Delete_Cir_LinkList(6);
cl.Display();
// cl.Display(16);
}
我哭了 今天是疯球的一天qaq