链表类模板(单链表的增改删排)

#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