这个有人会做吗,用c++,本人对c++链表和类不太熟练,希望尽快出结果,感谢
参考GPT和自己的思路:以下是可能符合题目要求的C++代码:
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
struct NODE {
char elem;
NODE* next;
};
class LinkedList {
private:
NODE* head;
public:
LinkedList() { // 无参数构造函数
head = nullptr;
}
LinkedList(char c) { // 带参构造函数,创建一个只有头节点的链表
head = new NODE;
head->elem = c;
head->next = nullptr;
}
void addNode(char c) { // 在链表头之前添加节点
NODE* newNode = new NODE;
newNode->elem = c;
newNode->next = head;
head = newNode;
}
void deleteHeadNode() { // 删除链表头节点
if (head != nullptr) {
NODE* temp = head;
head = head->next;
delete temp;
}
}
bool isEmpty() { // 判断链表是否为空
return head == nullptr;
}
void reverse() { // 链表首尾倒置
NODE* prev = nullptr;
NODE* curr = head;
NODE* next = nullptr;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
NODE* getHeadNode() { // 获得链表头节点指针
return head;
}
};
class Stack {
private:
LinkedList list;
public:
void push(char c) { // 压栈函数
list.addNode(c);
}
char pop() { // 出栈函数,获得栈顶数据
NODE* node = list.getHeadNode();
char c = node->elem;
list.deleteHeadNode();
return c;
}
void printStack() { // 输出栈中所有数据
NODE* curr = list.getHeadNode();
while (curr != nullptr) {
cout << curr->elem << " ";
curr = curr->next;
}
cout << endl;
}
bool isEmpty() {
return list.isEmpty();
}
};
int main() {
string s;
getline(cin, s);
Stack stack;
for (int i = 0; i < s.length(); i++) {
stack.push(s[i]);
}
while (!stack.isEmpty()) {
cout << stack.pop();
}
cout << endl;
return 0;
}
在本程序中,链表类 LinkedList 中的每个成员函数都是根据题目要求实现的。类 Stack 是基于链表类 LinkedList 实现的,它具有压栈、出栈和输出栈中所有数据的功能。主函数读入一个字符串并逐个压栈,然后逐个出栈输出。
这就是定义类,这些原样书上就有