编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素。(C语言)
时间: 2023-12-30 21:03:25 浏览: 73
以下是一个简单的 C 语言程序,可以实现堆栈的模拟:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int data[STACK_SIZE];
int top;
} Stack;
void init_stack(Stack *stack)
{
stack->top = -1;
}
void push(Stack *stack, int value)
{
if (stack->top == STACK_SIZE - 1) {
printf("Error: stack overflow\n");
return;
}
stack->top++;
stack->data[stack->top] = value;
}
int pop(Stack *stack)
{
int value;
if (stack->top == -1) {
printf("Error: stack underflow\n");
return 0;
}
value = stack->data[stack->top];
stack->top--;
return value;
}
int top(Stack *stack)
{
if (stack->top == -1) {
printf("Error: stack is empty\n");
return 0;
}
return stack->data[stack->top];
}
void print_stack(Stack *stack)
{
int i;
printf("Stack: ");
for (i = 0; i <= stack->top; i++) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
int main()
{
Stack stack;
int value, choice;
init_stack(&stack);
while (1) {
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Top\n");
printf("4. Print stack\n");
printf("5. Quit\n");
printf("Enter choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value to push: ");
scanf("%d", &value);
push(&stack, value);
break;
case 2:
value = pop(&stack);
if (value != 0) {
printf("Popped value: %d\n", value);
}
break;
case 3:
value = top(&stack);
if (value != 0) {
printf("Top value: %d\n", value);
}
break;
case 4:
print_stack(&stack);
break;
case 5:
exit(0);
default:
printf("Invalid choice\n");
}
}
return 0;
}
```
该程序使用了一个结构体来表示堆栈,其中包含一个整型数组和一个整型变量,分别用于存储栈中的元素和栈顶指针。然后定义了几个函数来实现入栈、出栈、返回栈顶元素和展示栈中元素等基本操作。在主函数中,使用一个无限循环来接受用户输入的操作,并调用相应的函数来实现操作。
阅读全文