编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素。(C语言)
时间: 2023-12-30 17:03:16 浏览: 66
数据结构中栈的算法的C语言程序实现,很好的,可直接运行
好的,我将为您编写一个简单的堆栈程序,您可以在其中输入数字进行入栈、出栈等操作。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义堆栈最大容量
typedef struct stack {
int data[MAX_SIZE]; // 堆栈数据
int top; // 堆栈顶部指针
} Stack;
// 初始化堆栈
void init(Stack *s) {
s->top = -1;
}
// 判断堆栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断堆栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *s, int data) {
if (isFull(s)) {
printf("Stack is full!\n");
return;
}
s->data[++s->top] = data;
}
// 返回栈顶元素
int top(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return -1;
}
return s->data[s->top];
}
// 出栈
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return -1;
}
return s->data[s->top--];
}
// 打印堆栈中的元素
void print(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return;
}
printf("Stack: ");
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
int main() {
Stack s;
init(&s);
int choice = 0, data = 0;
while (1) {
printf("Enter your choice:\n");
printf("1. Push\n2. Pop\n3. Top\n4. Print\n5. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter data to push: ");
scanf("%d", &data);
push(&s, data);
break;
case 2:
printf("Popped element: %d\n", pop(&s));
break;
case 3:
printf("Top element: %d\n", top(&s));
break;
case 4:
print(&s);
break;
case 5:
printf("Exiting...\n");
exit(0);
default:
printf("Invalid choice!\n");
}
}
return 0;
}
```
您可以在程序中输入数字进行操作,如按1进行入栈操作,按2进行出栈操作,按3查看栈顶元素,按4查看当前堆栈的所有元素,按5退出程序。
阅读全文