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

📄 onelink.h

📁 是一本教程的实例代码,可以下载后直接运行,即可以得到答案.
💻 H
字号:
#include <iostream.h>
#include "OnelinkNode.h"                   //单链表的结点类

class Onelink                              //单链表类
{
  public:
    OnelinkNode *head;                     //单链表的头指针
    
    Onelink(int n=0);                      //构造函数,以n个自然数建立单链表
    ~Onelink();                            //析构函数
    bool isEmpty()const                    //判断单链表是否为空
    {
        return head==NULL;
    }
    bool isFull()const                     //判断单链表是否已满(总是不满的)
    {
        return false;
    }
    int length()const;                     //返回单链表的长度 
    OnelinkNode* index(int i)const;        //定位,返回指向第i个结点的指针
    int get(int i)const;                   //返回第i个数据元素值
    bool set(int i,int k);                 //设置第i个数据元素值为k
    OnelinkNode* insert(OnelinkNode* p,int k);
                                           //k值插入作为p结点的后继结点
    bool remove(OnelinkNode *p);           //删除p结点的后继结点
    void output(OnelinkNode *p)const;      //输出以p为头指针的单链表 
    void output()const;                    //输出以head为头指针的单链表 
};

Onelink::Onelink(int n)                    //构造函数,以n个自然数建立单链表
{
    head=NULL;                             //n=0时,构造空链表
    if(n>0)                                //构造非空链表    
    {
        int i=1;
        OnelinkNode *rear,*q;
        head=new OnelinkNode(i++);
        rear=head;
        while(i<=n)              
        {
            q=new OnelinkNode(i++);
            rear->next=q;                  //q结点链入rear结点之后
            rear=q;                        //rear指向新的链尾结点
        }
    }
}

Onelink::~Onelink()                        //析构函数
{
    OnelinkNode *p=head,*q;
    while(p!=NULL)
    {
        q=p;
        p=p->next;                         //到达p的后继结点
        delete q;                          //释放q结点所占用的存储单元
    }
    head=NULL;                             //单链表为空
}

int Onelink::length()const                 //返回单链表的长度
{
    int i=0;
    OnelinkNode *p=head;                   //即this->head;
    while(p!=NULL)
    {
        i++;
        p=p->next;
    }
    return i;
}

OnelinkNode* Onelink::index(int i)const    //定位
{                //当0<i<=length()时,返回指向第i个结点的指针;否则返回NULL
    if(i<=0) return NULL;
    int j=0;
    OnelinkNode *p=head;
    while(p!=NULL && j<i)
    {
        j++;
        p=p->next;
    }
    return p;
}

int Onelink::get(int i)const               //返回第i个数据元素值
{
    OnelinkNode *p=index(i);               //定位,p指向第i个结点
    if(p!=NULL)
        return  p->data;
    else 
        return -32768;
}

bool Onelink::set(int i,int k)             //设置第i个数据元素值为k
{
    OnelinkNode *p=index(i);               //定位,p指向第i个结点
    if(p!=NULL)
    {
        p->data=k;
        return true;                       //操作成功
    }
    else
        return false;                      //操作失败
}

OnelinkNode* Onelink::insert(OnelinkNode *p,int k)
{                                          //k值插入作为p结点的后继结点
    OnelinkNode *q=new OnelinkNode(k);     //创建k值结点q
    if(p==NULL)
        p=q;                               //空表插入
    else                                   //表中、表尾插入
    {
        q->next=p->next;                   //q的后继结点应是p的原后继结点
        p->next=q;                         //q作为p的后继结点
    }
    return p;
}

bool Onelink::remove(OnelinkNode *p)       //删除p结点的后继结点
{
    if(p!=NULL)
    {
        OnelinkNode *q=p->next;            //q结点为p结点的后继结点
        if(q!=NULL)
        {
            p->next=p->next->next;         //或者p->next=q->next;
            delete q;
            return true;
        }
    }
    return false;
}

void Onelink::output(OnelinkNode *p)const  //输出以p为头指针的单链表 
{
    while(p!=NULL)
    {
        cout<<p->data<<"  ";
        p=p->next;
    }
    cout<<"\n";
}

void Onelink::output()const                //输出以head为头指针的单链表 
{
    cout<<"Onelink:  ";
    output(head);
}

void output2(Onelink h1)                   //时间复杂度是O(n*n)
{
    for(int i=1;i<=h1.length();i++)        //length()的时间复杂度是O(n)
        cout<<h1.get(i)<<"  ";             //get(i)的时间复杂度是O(n)
    cout<<"\n";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -