入栈出栈编程代码怎么写

时间:2025-03-04 23:27:49 明星趣事

入栈和出栈是栈操作的基本操作,它们分别用于将元素添加到栈顶和从栈顶移除元素。下面是几种不同编程语言中实现入栈和出栈操作的代码示例:

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;

}

```

C++

```cpp

include

include

class Stack {

private:

std::vector data;

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;

}

```

Java