📄 onering.h
字号:
#include <iostream.h>
#include "OnelinkNode.h" //单链表的结点类
class Onering //单向循环链表类
{
public:
OnelinkNode *head; //头指针
Onering(int n=0); //构造函数
~Onering(); //析构函数
bool isEmpty()const //判断单向循环链表是否为空
{
return head==NULL;
}
bool remove(OnelinkNode *p); //删除p的后继结点
void output(); //输出单向循环链表的各个结点值
};
Onering::Onering(int n) //建立n个结点的单向循环链表
{ //链表结点值为1到n
head=NULL;
if(n>0)
{
int i=1;
OnelinkNode *rear,*q;
head=new OnelinkNode(i++,head); //构造结点,data值为i、next值为head
rear=head;
while(i<=n)
{
q=new OnelinkNode(i++,head);
rear->next=q; //q结点链入rear结点之后
rear=q; //rear指向新的链尾结点
}
}
}
Onering::~Onering() //析构函数
{
OnelinkNode *p=head,*q;
do
{
q=p;
p=p->next;
delete q;
}while(p!=head);
head=NULL;
}
bool Onering::remove(OnelinkNode *p) //删除p的后继结点
{
if(p!=NULL)
{
OnelinkNode *q=p->next; //q是p的后继结点
if(q!=NULL)
{
if(q==head) //欲删除head指向结点时,
head=q->next; //要将head向后移动
p->next=q->next; //删除q结点
cout<<"remove: "<<q->data<<" ";
delete q;
return true;
}
}
return false;
}
void Onering::output() //输出单向循环链表的各个结点值
{
cout<<"Onering: ";
OnelinkNode *p=head;
do
{
cout<<p->data<<" -> ";
p=p->next;
}while(p!=head);
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -