您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页c++自定义链表类封装

c++自定义链表类封装

来源:纷纭教育

#include <iostream>

using namespace std;

class mylink
{
public:
    struct Data
    {
        string name;
        int balance;
        static int rate;
    };
    struct Link
    {
        Data usr;
        Link* next;
        Link* prev;
    };
    mylink();//创建头节点
    void append(const Data& newusr);//添加新节点
    void remove(const string& name);//移除某个节点
    void find(const string& name);//查询某个节点
    void sort();//根据余额排序
    void show();//遍历输出
    void setrate(const int& val);//调整利率

private:
   Link* head;
   Link* tail;
};

int mylink::Data::rate = 0;

//创建头节点
mylink::mylink()
{
    Link* L = (Link*)calloc(1,sizeof(Link));
    L->next = L;
    L->prev = L;
    head = L;
    tail = L;
}

//添加新节点
void mylink::append(const Data& newusr)
{
    Link* p = (Link*)calloc(1,sizeof(Link));
    p->usr = newusr;
    p->next = this->head;
    p->prev = this->tail;
    this->head->prev = p;
    this->tail->next = p;
    this->tail = p;
}

//移除某个节点
void mylink::remove(const string& name)
{
    Link* p = this->head;
    while(p->next != this->head)
    {
        if(p->usr.name == name)
        {
            Link* t = p->prev;
            if(p->next == this->head)
            {
                this->tail = t;
            }
            p->next->prev = t;
            t->next = p->next;
            free(p);
            p = t->next;
            continue;
        }
        p = p->next;
    }
}

//查询某个节点
void mylink::find(const string &name)
{
    Link* p = this->head->next;
    while(p != this->head)
    {
        if(p->usr.name == name)
        {
            cout << "账户:" << p->usr.name << " 余额:" << p->usr.balance << " 利率:" << p->usr.rate << endl;
            break;
        }
        p = p->next;
    }
}

//根据余额排序
void mylink::sort()
{
    Link* p = this->head->next;
    Link* q = p->next;
    Link* t = this->tail;
    while (p != t) {
        while ( p != t) {
            if(p->usr.balance < q->usr.balance)
            {
                Data temp = p->usr;
                p->usr = q->usr;
                q->usr = temp;
                p = p->next;
                q = q->next;
            }
            p = this->head->next;
            q = p->next;
            t = t->prev;
        }
    }
}

//遍历输出
void mylink::show()
{
    Link* p = this->head->next;
    while(p != this->head)
    {
        cout << "账户:" << p->usr.name << " 余额:" << p->usr.balance << " 利率:" << p->usr.rate << endl;
        p = p->next;
    }
}

//调整利率
void mylink::setrate(const int& val)
{
    this->tail->usr.rate = val;
}

int main()
{
    mylink L;
    mylink::Data newusr1 , newusr2 , newusr3;
    newusr1.name = "张三";
    newusr1.balance = 1000;
    L.append(newusr1);

    newusr2.name = "李四";
    newusr2.balance = 1010;
    L.append(newusr2);

    newusr3.name = "王五";
    newusr3.balance = 910;
    L.append(newusr3);

    L.show();
    L.find("张三");

    L.sort();
    L.show();

    L.setrate(1);
    L.show();
    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务