当前位置:实例文章 » JAVA Web实例» [文章]C++线性技巧,STL

C++线性技巧,STL

发布人:shili8 发布时间:2025-02-15 22:46 阅读次数:0

**C++线性技巧与STL**

在编程领域,线性技巧(Linear Techniques)是指使用线性的算法来解决问题的方法。这些技巧包括了各种数据结构和算法,如链表、栈、队列、树等。在C++中,我们可以使用标准模板库(STL)提供的容器类来实现这些线性技巧。

**1. 链表**

链表是一种常见的线性数据结构,它由一系列的结点组成,每个结点包含一个值和一个指向下一个结点的指针。链表可以用于实现栈、队列等数据结构。

cpp// 定义一个结点类struct Node {
 int data;
 Node* next;
};

// 链表类class LinkedList {
public:
 Node* head;

 // 构造函数 LinkedList() : head(nullptr) {}

 // 添加元素到链表尾部 void push_back(int value) {
 Node* newNode = new Node();
 newNode->data = value;
 newNode->next = nullptr;

 if (head == nullptr) {
 head = newNode;
 } else {
 Node* current = head;
 while (current->next != nullptr) {
 current = current->next;
 }
 current->next = newNode;
 }
 }

 // 删除链表中的元素 void remove(int value) {
 if (head == nullptr) return;

 if (head->data == value) {
 Node* temp = head;
 head = head->next;
 delete temp;
 return;
 }

 Node* current = head;
 while (current->next != nullptr) {
 if (current->next->data == value) {
 Node* temp = current->next;
 current->next = current->next->next;
 delete temp;
 return;
 }
 current = current->next;
 }
 }

 // 打印链表中的元素 void print() {
 Node* current = head;
 while (current != nullptr) {
 std::cout << current->data << " ";
 current = current->next;
 }
 std::cout << std::endl;
 }
};


**2. 栈**

栈是一种线性数据结构,它遵循后进先出的原则。栈可以用于实现递归算法、括号匹配等问题。

cpp// 定义一个栈类class Stack {
private:
 int* elements;
 int top;
 int capacity;

public:
 // 构造函数 Stack(int size) : capacity(size), top(-1) {
 elements = new int[capacity];
 }

 // 添加元素到栈顶 void push(int value) {
 if (top == capacity -1) {
 std::cerr << "Stack is full!" << std::endl;
 return;
 }
 elements[++top] = value;
 }

 // 删除栈顶元素 int pop() {
 if (top == -1) {
 std::cerr << "Stack is empty!" << std::endl;
 return -1; // or throw an exception }
 return elements[top--];
 }

 // 查看栈顶元素 int peek() {
 if (top == -1) {
 std::cerr << "Stack is empty!" << std::endl;
 return -1; // or throw an exception }
 return elements[top];
 }

 // 判断栈是否为空 bool isEmpty() {
 return top == -1;
 }

 // 销毁栈 ~Stack() {
 delete[] elements;
 }
};


**3. 队列**

队列是一种线性数据结构,它遵循先进先出的原则。队列可以用于实现生产者-消费者问题等问题。

cpp// 定义一个队列类class Queue {
private:
 int* elements;
 int front;
 int rear;
 int capacity;

public:
 // 构造函数 Queue(int size) : capacity(size), front(0), rear(-1) {
 elements = new int[capacity];
 }

 // 添加元素到队列尾部 void enqueue(int value) {
 if (rear == capacity -1) {
 std::cerr << "Queue is full!" << std::endl;
 return;
 }
 elements[++rear] = value;
 }

 // 删除队列头部元素 int dequeue() {
 if (front > rear) {
 std::cerr << "Queue is empty!" << std::endl;
 return -1; // or throw an exception }
 return elements[front++];
 }

 // 查看队列头部元素 int peek() {
 if (front > rear) {
 std::cerr << "Queue is empty!" << std::endl;
 return -1; // or throw an exception }
 return elements[front];
 }

 // 判断队列是否为空 bool isEmpty() {
 return front > rear;
 }

 // 销毁队列 ~Queue() {
 delete[] elements;
 }
};


**4. STL容器类**

STL提供了各种容器类,如vector、list、stack、queue等。这些容器类可以用于实现线性技巧。

cpp// 使用vector实现链表#include <vector>

class LinkedList {
public:
 std::vector<int> elements;

 // 添加元素到链表尾部 void push_back(int value) {
 elements.push_back(value);
 }

 // 删除链表中的元素 void remove(int value) {
 elements.erase(std::remove(elements.begin(), elements.end(), value), elements.end());
 }

 // 打印链表中的元素 void print() {
 for (int element : elements) {
 std::cout << element << " ";
 }
 std::cout << std::endl;
 }
};


cpp// 使用stack实现栈#include <stack>

class Stack {
public:
 std::stack<int> stack;

 // 添加元素到栈顶 void push(int value) {
 stack.push(value);
 }

 // 删除栈顶元素 int pop() {
 return stack.top();
 }

 // 查看栈顶元素 int peek() {
 return stack.top();
 }
};


cpp// 使用queue实现队列#include <queue>

class Queue {
public:
 std::queue<int> queue;

 // 添加元素到队列尾部 void enqueue(int value) {
 queue.push(value);
 }

 // 删除队列头部元素 int dequeue() {
 return queue.front();
 }

 // 查看队列头部元素 int peek() {
 return queue.front();
 }
};


以上是C++线性技巧与STL的相关内容。这些技巧和容器类可以用于实现各种数据结构和算法,提高编程效率和代码质量。

其他信息

其他资源

Top