入栈和出栈是栈操作的基本操作,它们分别用于将元素添加到栈顶和从栈顶移除元素。下面是几种不同编程语言中实现入栈和出栈操作的代码示例:
C语言
```c
include include typedef struct { int *base; int *top; int stack_size; } Stack; // 初始化栈 void initStack(Stack *stack, int size) { stack->base = (int *)malloc(size * sizeof(int)); stack->top = stack->base; stack->stack_size = size; } // 判断栈是否为空 int isEmpty(Stack *stack) { return stack->top == stack->base; } // 入栈 void push(Stack *stack, int item) { if (stack->top - stack->base >= stack->stack_size) { printf("Stack overflow\n"); return; } *(stack->top) = item; stack->top++; } // 出栈 int pop(Stack *stack) { if (isEmpty(stack)) { printf("Stack underflow\n"); return -1; // 或者定义一个特殊值表示错误 } stack->top--; return *(stack->top); } // 获取栈顶元素 int peek(Stack *stack) { if (isEmpty(stack)) { printf("Stack is empty\n"); return -1; // 或者定义一个特殊值表示错误 } return *(stack->top - 1); } // 打印栈内容 void printStack(Stack *stack) { int i; for (i = stack->base; i < stack->top; i++) { printf("%d ", *(i)); } printf("\n"); } // 释放栈内存 void freeStack(Stack *stack) { free(stack->base); stack->base = stack->top = NULL; stack->stack_size = 0; } int main() { Stack stack; initStack(&stack, 5); push(&stack, 1); push(&stack, 2); push(&stack, 3); printStack(&stack); // 输出: 1 2 3 printf("Popped: %d\n", pop(&stack)); // 输出: 3 printStack(&stack); // 输出: 1 2 printf("Top element: %d\n", peek(&stack)); // 输出: 2 freeStack(&stack); return 0; } ``` ```cpp include include class Stack { private: std::vector public: // 入栈 void push(int item) { data.push_back(item); } // 出栈 int pop() { if (isEmpty()) { std::cerr << "Stack is empty\n"; return -1; // 或者定义一个特殊值表示错误 } int item = data.back(); data.pop_back(); return item; } // 获取栈顶元素 int top() { if (isEmpty()) { std::cerr << "Stack is empty\n"; return -1; // 或者定义一个特殊值表示错误 } return data.back(); } // 判断栈是否为空 bool isEmpty() { return data.empty(); } }; int main() { Stack stack; stack.push(1); stack.push(2); stack.push(3); std::cout << "Popped: " << stack.pop() << std::endl; // 输出: 3 std::cout << "Top element: " << stack.top() << std::endl; // 输出: 2 return 0; } ```C++
Java