#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;
}