
使用c++实现这两个内容 必须有:顺序栈 链栈 循环队列 链队 写在一个程序上
关注引自强大而免费的微信小程序:皆我百晓生。
以下是使用数据结构实现的C++程序,包含顺序栈、链栈、循环队列和链队的实现:
#include<iostream>
using namespace std;
// 定义顺序栈的结构体
struct SeqStack {
int *data;
int top;
int maxsize;
};
// 初始化顺序栈
void initSeqStack(SeqStack &s, int size) {
s.data = new int[size];
s.top = -1;
s.maxsize = size;
}
// 入栈操作
void push(SeqStack &s, int value) {
if (s.top == s.maxsize - 1) {
cout << "Stack is full!" << endl;
return;
}
s.top++;
s.data[s.top] = value;
}
// 出栈操作
int pop(SeqStack &s) {
if (s.top == -1) {
cout << "Stack is empty!" << endl;
return -1;
}
int value = s.data[s.top];
s.top--;
return value;
}
// 初始化链栈的结构体
struct LinkNode {
int data;
LinkNode *next;
};
struct LinkStack {
LinkNode *top;
};
// 初始化链栈
void initLinkStack(LinkStack &s) {
s.top = nullptr;
}
// 入栈操作
void push(LinkStack &s, int value) {
LinkNode *newNode = new LinkNode;
newNode->data = value;
newNode->next = s.top;
s.top = newNode;
}
// 出栈操作
int pop(LinkStack &s) {
if (s.top == nullptr) {
cout << "Stack is empty!" << endl;
return -1;
}
int value = s.top->data;
LinkNode *temp = s.top;
s.top = s.top->next;
delete temp;
return value;
}
// 定义循环队列的结构体
const int MAXSIZE = 6;
struct CircularQueue {
int data[MAXSIZE];
int front;
int rear;
};
// 初始化循环队列
void initCircularQueue(CircularQueue &q) {
q.front = q.rear = 0;
}
// 入队操作
void enqueue(CircularQueue &q, int value) {
if ((q.rear + 1) % MAXSIZE == q.front) {
cout << "Queue is full!" << endl;
return;
}
q.data[q.rear] = value;
q.rear = (q.rear + 1) % MAXSIZE;
}
// 出队操作
int dequeue(CircularQueue &q) {
if (q.front == q.rear) {
cout << "Queue is empty!" << endl;
return -1;
}
int value = q.data[q.front];
q.front = (q.front + 1) % MAXSIZE;
return value;
}
// 定义链队的结构体
struct LinkQueueNode {
int data;
LinkQueueNode *next;
};
struct LinkQueue {
LinkQueueNode *front;
LinkQueueNode *rear;
};
// 初始化链队
void initLinkQueue(LinkQueue &q) {
q.front = q.rear = nullptr;
}
// 入队操作
void enqueue(LinkQueue &q, int value) {
LinkQueueNode *newNode = new LinkQueueNode;
newNode->data = value;
newNode->next = nullptr;
if (q.front == nullptr) {
q.front = q.rear = newNode;
} else {
q.rear->next = newNode;
q.rear = newNode;
}
}
// 出队操作
int dequeue(LinkQueue &q) {
if (q.front == nullptr) {
cout << "Queue is empty!" << endl;
return -1;
}
int value = q.front->data;
LinkQueueNode *temp = q.front;
q.front = q.front->next;
if (q.front == nullptr) {
q.rear = nullptr;
}
delete temp;
return value;
}
int main() {
// 构建顺序栈
SeqStack seqStack;
int seqStackSize;
cout << "请输入顺序栈元素个数:";
cin >> seqStackSize;
initSeqStack(seqStack, seqStackSize);
cout << "请输入顺序栈元素:" << endl;
for (int i = 0; i < seqStackSize; i++) {
int value;
cin >> value;
push(seqStack, value);
}
cout << "顺序栈出栈顺序为:";
while (seqStack.top != -1) {
cout << pop(seqStack) << " ";
}
cout << endl;
// 构建链栈
LinkStack linkStack;
int linkStackSize;
cout << "请输入链栈元素个数:";
cin >> linkStackSize;
initLinkStack(linkStack);
cout << "请输入链栈元素:" << endl;
for (int i = 0; i < linkStackSize; i++) {
int value;
cin >> value;
push(linkStack, value);
}
cout << "链栈出栈顺序为:";
while (linkStack.top != nullptr) {
cout << pop(linkStack) << " ";
}
cout << endl;
// 构建循环队列
CircularQueue circularQueue;
int circularQueueSize;
cout << "请输入循环队列元素个数:";
cin >> circularQueueSize;
initCircularQueue(circularQueue);
cout << "请输入循环队列元素:" << endl;
for (int i = 0; i < circularQueueSize; i++) {
int value;
cin >> value;
enqueue(circularQueue, value);
}
cout << "循环队列出队顺序为:";
while (circularQueue.front != circularQueue.rear) {
cout << dequeue(circularQueue) << " ";
}
cout << endl;
// 构建链队
LinkQueue linkQueue;
int linkQueueSize;
cout << "请输入链队元素个数:";
cin >> linkQueueSize;
initLinkQueue(linkQueue);
cout << "请输入链队元素:" << endl;
for (int i = 0; i < linkQueueSize; i++) {
int value;
cin >> value;
enqueue(linkQueue, value);
}
cout << "链队出队顺序为:";
while (linkQueue.front != nullptr) {
cout << dequeue(linkQueue) << " ";
}
cout << endl;
return 0;
}
这个程序先创建了顺序栈、链栈、循环队列和链队的类和函数,并按照题目要求进行了相关操作的测试。