如何用C语言编写代码来创建一个基于顺序存储的栈,允许用户通过键盘输入元素并实现元素的压入和弹出操作?
时间: 2024-10-25 19:12:13 浏览: 25
在C语言中,我们可以使用动态数组(malloc)来创建一个基于顺序存储的栈。这里我会提供一个简单的示例代码,包括栈的创建、元素的压入(push)和弹出(pop)操作:
```c
#include <stdio.h>
#include <stdlib.h> // 需要用到malloc和free库
#define MAX_SIZE 10 // 栈的最大容量
// 定义栈结构体
typedef struct {
int* data; // 存放数据的数组
int top; // 栈顶指针
int size; // 当前栈的大小
} Stack;
// 初始化栈
void init(Stack* s) {
s->data = (int*)malloc(MAX_SIZE * sizeof(int)); // 分配内存
s->top = -1;
s->size = 0;
}
// 压入元素
void push(Stack* s, int item) {
if (s->top >= MAX_SIZE - 1) {
printf("Stack overflow. Cannot push element.\n");
return;
}
s->data[++s->top] = item; // 把新元素放在栈顶
s->size++;
}
// 弹出元素
int pop(Stack* s) {
if (s->top == -1) { // 空栈
printf("Stack underflow. No elements to pop.\n");
return -1; // 返回错误码
}
int popped = s->data[s->top]; // 获取栈顶元素
s->data[s->top] = 0; // 清除栈顶元素位置
s->top--; // 减少栈顶指针
s->size--;
return popped;
}
// 检查栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 主函数,用于演示栈的使用
int main() {
Stack myStack;
init(&myStack);
while (1) {
char choice;
printf("Enter 'p' to push, 'q' to quit: ");
scanf(" %c", &choice);
switch(choice) {
case 'p':
int num;
printf("Enter a number to push: ");
scanf("%d", &num);
push(&myStack, num);
break;
case 'q':
if (is_empty(&myStack)) {
printf("Stack is already empty.\n");
} else {
printf("Popped value: %d\n", pop(&myStack));
}
exit(0); // 结束程序
default:
printf("Invalid input.\n");
}
}
free(myStack.data); // 退出程序前记得释放内存
return 0;
}
```
在这个例子中,用户通过输入'p'来压入元素,'q'来结束程序并查看最近弹出的元素。如果栈已满,`push`会显示"Stack overflow";如果尝试弹出一个空栈,`pop`会显示"Stack underflow"。
阅读全文