⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onering.h

📁 是一本教程的实例代码,可以下载后直接运行,即可以得到答案.
💻 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 + -