#include<iostream>
#include<string>
using namespace std;
class Node
{
public:
int id;
string name;
Node *pNode;
Node() :pNode(nullptr){}
Node(int ID, string n) :id(ID), name(n), pNode(nullptr){}
Node(Node &n) :id(n.id), name(n.name), pNode(nullptr){}
void display()
{
cout << id << '\t' << name << endl;
}
};
class Link
{
private:
Node *head;
public:
Link()
{
head = new Node();
}
~Link()
{
while (head != nullptr)
{
Node *p = head->pNode;
delete(head);
head = p;
}
}
void traverse()//遍历并输出链表
{
Node *p = head->pNode;
while (p != nullptr)
{
p->display();
p = p->pNode;
}
cout << endl;
}
void insert(Node &n)//在链表尾部插入结点
{
Node *tail = head;
while (tail->pNode != nullptr)
tail = tail->pNode;
Node *newNode = new Node(n);
tail->pNode = newNode;
}
void sort()//根据id对链表进行升序排序(冒泡排序法)
{
int p1;
string p2;
Node *t1 = nullptr;
Node *t2 = nullptr;
t1 = head;
while (head != t2)
{
while (t1->pNode != t2)
{
if (t1->id > t1->pNode->id)
{
p1 = t1->id;
p2 = t1->name;
t1->id = t1->pNode->id;
t1->name = t1->pNode->name;
t1->pNode->id = p1;
t1->pNode->name = p2;
}
t1 = t1->pNode;
}
t2 = t1;
t1 = head;
}
}
void deleteByID(int id)//根据id对相应结点进行删除
{
Node *p = head->pNode;
Node *q = head;
while (p != nullptr)
{
if (p->id == id)
{
q->pNode = p->pNode;
delete(p);
p = q->pNode;
}
else
{
p = p->pNode;
q = q->pNode;
}
}
}
void modifyByID(int id, string name)//根据id对相应结点的name进行修改
{
Node *p = head->pNode;
while (p != nullptr)
{
if (p->id == id)
{
p->name = name;
}
p = p->pNode;
}
}
};
int main()
{
Link link;
Node s1(1001, "张三");
Node s2(1002, "李四");
Node s3(2001, "王五");
link.insert(s1);
link.insert(s2);
link.insert(s3);
link.traverse();
link.deleteByID(s2.id);
link.traverse();
link.modifyByID(s3.id, "赵六");
link.traverse();
link.sort();
link.traverse();
return 0;
}
链表类模板(单链表的增改删排)
猜你喜欢
转载自blog.csdn.net/qq_43548474/article/details/89146506
今日推荐
周排行