当前位置:实例文章 » 其他实例» [文章]【C++修炼之路】list 模拟实现

【C++修炼之路】list 模拟实现

发布人:shili8 发布时间:2025-01-18 04:52 阅读次数:0

**C++修炼之路**

在 C++ 的世界里,链表(List)是一个非常重要的数据结构。它可以用来存储一系列的元素,而这些元素之间没有固定顺序。这使得链表成为一个非常灵活和高效的数据结构。

在本篇文章中,我们将通过实现一个链表类来深入了解 C++ 中链表的基本概念和使用方法。

### 链表的定义链表是一种线性数据结构,通常由一系列的结点(Node)组成,每个结点包含一个值和一个指向下一个结点的指针。链表可以用来存储一系列的元素,而这些元素之间没有固定顺序。

### 链表类的实现我们将通过实现一个 `List` 类来模拟链表的行为。

cpp// list.h#ifndef LIST_H#define LIST_Hclass Node {
public:
 int value;
 Node* next;

 Node(int val) : value(val), next(nullptr) {}
};

class List {
private:
 Node* head;
 Node* tail;
 int size;

public:
 List() : head(nullptr), tail(nullptr), size(0) {}

 ~List();

 void push_back(int val);
 void push_front(int val);

 int pop_back();
 int pop_front();

 int get_size() const { return size; }

 bool is_empty() const { return size ==0; }
};

#endif // LIST_H


cpp// list.cpp#include "list.h"
#include <iostream>

List::~List() {
 while (head) {
 Node* temp = head;
 head = head->next;
 delete temp;
 }
}

void List::push_back(int val) {
 Node* newNode = new Node(val);
 if (!head) {
 head = tail = newNode;
 } else {
 tail->next = newNode;
 tail = newNode;
 }
 size++;
}

void List::push_front(int val) {
 Node* newNode = new Node(val);
 if (head) {
 newNode->next = head;
 head = newNode;
 } else {
 head = tail = newNode;
 }
 size++;
}

int List::pop_back() {
 if (!tail) return -1; // list is empty int val = tail->value;
 Node* temp = head;
 while (temp->next != tail) {
 temp = temp->next;
 }
 delete tail;
 tail = temp;
 size--;
 return val;
}

int List::pop_front() {
 if (!head) return -1; // list is empty int val = head->value;
 Node* temp = head;
 head = head->next;
 if (head == nullptr) {
 delete temp;
 tail = nullptr;
 } else {
 delete temp;
 }
 size--;
 return val;
}


### 使用示例
cppint main() {
 List list;

 // push_back list.push_back(1);
 list.push_back(2);
 list.push_back(3);

 std::cout << "Size: " << list.get_size() << std::endl; // Output: Size:3 // pop_back int val = list.pop_back();
 std::cout << "Popped value: " << val << std::endl; // Output: Popped value:3 std::cout << "Size: " << list.get_size() << std::endl; // Output: Size:2 // push_front list.push_front(4);
 list.push_front(5);

 std::cout << "Size: " << list.get_size() << std::endl; // Output: Size:4 return0;
}


### 总结在本篇文章中,我们通过实现一个链表类来深入了解 C++ 中链表的基本概念和使用方法。我们学习了链表的定义、链表类的实现以及链表的常用操作(如 push_back、push_front、pop_back 和 pop_front)。最后,我们通过一个示例程序演示了链表的使用方法。

希望本篇文章能够帮助你更好地理解 C++ 中链表的概念和使用方法。

其他信息

其他资源

Top