可以将双栈结构用C++语言代码实现吗
时间: 2023-09-20 18:05:02 浏览: 50
可以,以下是双栈结构的C语言实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top1; // 栈1栈顶指针
int top2; // 栈2栈顶指针
} DoubleStack;
// 初始化双栈
void initDoubleStack(DoubleStack *s) {
s->top1 = -1;
s->top2 = MAX_SIZE;
}
// 判断栈1是否为空
int isStack1Empty(DoubleStack *s) {
return s->top1 == -1;
}
// 判断栈2是否为空
int isStack2Empty(DoubleStack *s) {
return s->top2 == MAX_SIZE;
}
// 判断双栈是否为空
int isDoubleStackEmpty(DoubleStack *s) {
return isStack1Empty(s) && isStack2Empty(s);
}
// 判断栈1是否已满
int isStack1Full(DoubleStack *s) {
return s->top1 + 1 == s->top2;
}
// 判断栈2是否已满
int isStack2Full(DoubleStack *s) {
return s->top2 - 1 == s->top1;
}
// 判断双栈是否已满
int isDoubleStackFull(DoubleStack *s) {
return isStack1Full(s) || isStack2Full(s);
}
// 入栈操作,stackFlag表示是往哪个栈中入栈(1为栈1,2为栈2)
int push(DoubleStack *s, int stackFlag, int value) {
if (isDoubleStackFull(s)) {
printf("Double Stack is Full.\n");
return 0;
}
if (stackFlag == 1) {
s->data[++s->top1] = value;
} else if (stackFlag == 2) {
s->data[--s->top2] = value;
} else {
printf("Invalid Stack Flag.\n");
return 0;
}
return 1;
}
// 出栈操作,stackFlag表示是从哪个栈中出栈(1为栈1,2为栈2)
int pop(DoubleStack *s, int stackFlag, int *value) {
if (isDoubleStackEmpty(s)) {
printf("Double Stack is Empty.\n");
return 0;
}
if (stackFlag == 1) {
if (isStack1Empty(s)) {
printf("Stack1 is Empty.\n");
return 0;
}
*value = s->data[s->top1--];
} else if (stackFlag == 2) {
if (isStack2Empty(s)) {
printf("Stack2 is Empty.\n");
return 0;
}
*value = s->data[s->top2++];
} else {
printf("Invalid Stack Flag.\n");
return 0;
}
return 1;
}
int main() {
DoubleStack s;
initDoubleStack(&s);
push(&s, 1, 1);
push(&s, 1, 2);
push(&s, 1, 3);
push(&s, 2, 4);
push(&s, 2, 5);
push(&s, 2, 6);
int value;
pop(&s, 1, &value);
printf("pop from stack1: %d\n", value);
pop(&s, 2, &value);
printf("pop from stack2: %d\n", value);
return 0;
}
```
以上代码实现了双栈结构的初始化、判断栈是否为空、判断栈是否已满、入栈和出栈操作。可以根据需要进行修改和扩展。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)