如何使用键盘输入实现顺序栈的数据结构,以便向其中压入一个给定元素并随后弹出栈顶元素?
时间: 2024-10-25 08:15:39 浏览: 29
在C语言中,你可以通过以下几个步骤实现一个简单的顺序栈数据结构来接受键盘输入并进行插入(压入)和弹出(取出栈顶)操作:
1. 定义一个栈结构体,包含一个整型数组作为数据容器,一个整数表示栈顶位置,以及两个辅助变量(如栈长)。
```c
typedef struct {
int data[MAX_STACK_SIZE]; // 数据存储
int top; // 栈顶索引
int size; // 栈的实际大小
} Stack;
```
2. 创建初始化函数,用于创建新的栈实例并清零栈顶。
```c
Stack* createStack() {
Stack* s = (Stack*) malloc(sizeof(Stack));
s->top = -1;
s->size = 0;
return s;
}
```
3. 实现压入元素的函数,检查是否已满再进行操作。
```c
void push(Stack* s, int value) {
if (s->top == MAX_STACK_SIZE - 1) {
printf("Stack is full. Cannot push.\n");
return;
}
s->data[++s->top] = value;
printf("Pushed %d onto the stack.\n", value);
}
```
4. 实现弹出栈顶元素的函数,检查栈是否为空。
```c
int pop(Stack* s) {
if (s->top == -1) {
printf("Stack is empty. Cannot pop.\n");
return -1;
}
int topElement = s->data[s->top--];
printf("Popped %d from the stack.\n", topElement);
return topElement;
}
```
5. 主函数部分,不断接收用户输入,执行相应操作。
```c
int main() {
Stack* s = createStack();
while (1) {
char command;
printf("Enter 'i' to push an element, 'p' to pop, or 'q' to quit: ");
scanf("%c", &command);
switch (command) {
case 'i':
int input;
scanf("%d", &input);
push(s, input);
break;
case 'p':
int poppedValue = pop(s);
if (poppedValue != -1)
break; // 用户选择退出不需要再次提示
case 'q':
free(s);
return 0;
}
// 清空输入缓冲区,防止下一个命令干扰
getchar();
}
}
```
当你运行此程序时,它会持续等待用户的输入,直到用户选择退出(输入'q')。用户可以输入'i'将元素压入栈,输入'p'弹出栈顶元素并打印。
阅读全文