C++链表实现代码详解:从基本节点到链表操作

1 下载量 85 浏览量 更新于2024-08-29 收藏 104KB PDF 举报
C++ 数据结构链表的实现代码 在计算机科学中,链表是一种常用的数据结构,它是一种线性数据结构,其中每个元素都是一个独立的对象,称为节点(Node),每个节点都包含着一个数据域和一个指向下一个节点的指针域。在 C++ 中,实现链表需要定义节点的结构和链表的操作函数。 节点(Node)的基本结构 在 C++ 中,节点的基本结构可以用以下代码表示: ```cpp class Node { public: int data; Node *next; Node(int da = 0, Node *p = NULL) { this->data = da; this->next = p; } }; ``` 在上面的代码中,我们定义了一个节点类 `Node`,它有两个成员变量:`data` 和 `next`。`data` 用于存储节点的数据,而 `next` 是一个指针,指向下一个节点。节点的构造函数 `Node` 接受两个参数:`da` 和 `p`,其中 `da` 是节点的初始数据,而 `p` 是指向下一个节点的指针。如果不指定第二个参数,构造函数将默认将 `next` 设置为 `NULL`。 链表(List)的基本结构 在 C++ 中,链表的基本结构可以用以下代码表示: ```cpp class List { private: Node *head, *tail; int position; public: List() { head = tail = NULL; }; ~List() { delete head; delete tail; }; void print(); void insert(int da = 0); void delete(int da = 0); void search(int da = 0); }; ``` 在上面的代码中,我们定义了一个链表类 `List`,它有两个私有成员变量:`head` 和 `tail`,分别指向链表的头节点和尾节点。链表的构造函数 `List` 将 `head` 和 `tail` 初始化为 `NULL`。链表的析构函数 `~List` 将释放链表中的所有节点。 链表的操作函数 链表的操作函数包括插入、删除和查找等。插入操作可以在链表的任意位置插入一个新节点,删除操作可以删除链表中的某个节点,查找操作可以查找链表中的某个节点。 单链表的实现 以下是单链表的实现代码: ```cpp #include <iostream> using namespace std; class Node { public: int data; Node *next; Node(int da = 0, Node *p = NULL) { this->data = da; this->next = p; } }; class List { private: Node *head, *tail; int position; public: List() { head = tail = NULL; }; ~List() { delete head; delete tail; }; void print(); void insert(int da = 0); void delete(int da = 0); void search(int da = 0); }; void List::print() { Node *p = head; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } void List::insert(int da) { Node *p = new Node(da); if (head == NULL) { head = p; tail = p; } else { tail->next = p; tail = p; } } void List::delete(int da) { Node *p = head; Node *q = NULL; while (p != NULL) { if (p->data == da) { if (q == NULL) { head = p->next; } else { q->next = p->next; } delete p; return; } q = p; p = p->next; } } void List::search(int da) { Node *p = head; int pos = 0; while (p != NULL) { if (p->data == da) { cout << "Found at position " << pos << endl; return; } p = p->next; pos++; } cout << "Not found" << endl; } ``` 在上面的代码中,我们实现了链表的插入、删除和查找操作。插入操作将新节点插入到链表的尾部,删除操作将删除链表中的某个节点,查找操作将查找链表中的某个节点。