别踩白块的链表实现过程
时间: 2023-11-16 08:07:08 浏览: 13
别踩白块游戏可以使用单链表来实现。下面是链表的基本结构和实现过程:
定义一个Node结构体表示链表中的节点,结构体包含两个成员变量:一个是存储节点数据的整型变量data,另一个是指向下一个节点的指针next。
```c++
struct Node {
int data;
Node* next;
};
```
定义一个链表类PianoTiles,包含头节点head和尾节点tail,以及链表的相关操作函数。
```c++
class PianoTiles {
public:
PianoTiles(); // 构造函数
~PianoTiles(); // 析构函数
void addNode(int data); // 添加节点
void deleteNode(); // 删除节点
void printList(); // 打印链表
private:
Node* head; // 头节点
Node* tail; // 尾节点
int size; // 链表大小
};
```
链表的构造函数中要初始化头节点和尾节点,并将它们的next指针都设置为nullptr。
```c++
PianoTiles::PianoTiles() {
head = tail = new Node;
head->next = nullptr;
size = 0;
}
```
链表的析构函数中要释放链表中所有的节点空间。
```c++
PianoTiles::~PianoTiles() {
Node* p = head;
while (p != nullptr) {
Node* q = p;
p = p->next;
delete q;
}
size = 0;
}
```
链表的添加节点函数addNode,先创建一个新的节点,将数据存储到新节点中,然后将新节点插入到链表的尾部。
```c++
void PianoTiles::addNode(int data) {
Node* p = new Node;
p->data = data;
p->next = nullptr;
tail->next = p;
tail = p;
size++;
}
```
链表的删除节点函数deleteNode,删除链表的尾节点。
```c++
void PianoTiles::deleteNode() {
if (size == 0) return;
Node* p = head;
while (p->next != tail) {
p = p->next;
}
delete tail;
tail = p;
tail->next = nullptr;
size--;
}
```
链表的打印函数printList,将链表中所有的节点数据依次打印出来。
```c++
void PianoTiles::printList() {
Node* p = head->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
```
以上就是使用单链表实现别踩白块游戏的基本过程。