实现元素 1 2 3 4的入栈,并出栈两个元素后再入栈元素5 6 7,最后遍历打印当前栈中全部元素
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 10
struct Stack {
int top;
int data[STACK_SIZE];
};
// 初始化栈
void initStack(struct Stack *s) {
s->top = -1;
}
int isEmpty(struct Stack *s) {
return s->top == -1;
}
int isFull(struct Stack *s) {
return s->top == STACK_SIZE - 1;
}
void push(struct Stack *s, int element) {
if (isFull(s)) {
printf("栈已满,无法入栈\n");
return;
}
s->top++;
s->data[s->top] = element;
}
int pop(struct Stack *s) {
if (isEmpty(s)) {
printf("栈为空,无法出栈\n");
return -1;
}
int element = s->data[s->top];
s->top--;
return element;
}
void traverse(struct Stack *s) {
printf("当前栈中的元素为:\n");
for (int i = s->top; i >= 0; i--) {
printf("%d ", s->data[i]);
}
printf("\n");
}
int main() {
struct Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
push(&s, 4);
pop(&s);
pop(&s);
push(&s, 5);
push(&s, 6);
push(&s, 7);
traverse(&s);
return 0;
}
在这里给出一组输入。例如:
152
这是一道简单的栈的题目,按照题意,我们需要将元素1、2、3、4先依次压入栈中,之后再弹出两个元素,并将元素5、6、7压入栈中,最后遍历并打印栈中的所有元素。
根据题目,我们需要先了解栈的一些基本操作,如压栈(Push)、出栈(Pop)和遍历栈。
栈是一种受限的线性表,只能在链的一端进行插入和删除操作,遵循先进后出(Last-In-First-Out)的原则。
以下是本题参考代码:
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> s; //定义一个stack模板类
int arr[] = {1, 2, 3, 4, 5, 6, 7};
for (int i = 0; i < 4; i++){ //元素1、2、3、4先依次压入栈中
s.push(i+1);
}
for (int i = 0; i < 2; i++){ //再弹出两个元素
s.pop();
}
for (int i = 4; i < 7; i++){ //并将元素5、6、7压入栈中
s.push(arr[i]);
}
while(!s.empty()){ //最后遍历并打印栈中的所有元素
cout << s.top() << " "; //输出栈顶元素
s.pop(); //出栈
}
cout << endl;
return 0;
}
在这段代码中,我们先定义一个stack模板类,将元素1、2、3、4先依次压入栈中,压栈操作使用push函数;之后再弹出两个元素,出栈操作使用pop函数;并将元素5、6、7压入栈中;最后遍历并打印栈中的所有元素,使用top函数取栈顶元素并使用pop函数出栈,直到栈为空。
需要注意的是,此处需要引入和库,如果是使用VS Code编译,需要在tasks.json中配置相应的参数。
完整代码如下: