如何用C语言编写一个简单的顺序栈,实现用户通过键盘输入元素的压入和栈顶元素的删除(弹出)功能,并能展示相应的代码实现?
时间: 2024-10-25 17:15:11 浏览: 13
在C语言中,我们可以创建一个简单的顺序栈(基于数组实现)来完成这个任务。首先,我们需要定义一个结构体表示栈的节点,并包含数据和指向下一个节点的指针。接着,我们实现几个基本操作:初始化栈、压入元素、查看栈顶元素以及弹出元素。
```c
#include <stdio.h>
#define MAX_SIZE 50
// 定义栈的节点结构
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化栈为空
StackNode* initStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
stack->next = NULL;
return stack;
}
// 压入元素到栈顶
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 查看栈顶元素但不删除
int peek(StackNode* top) {
if (top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示空栈
}
return top->data;
}
// 弹出并返回栈顶元素(如果栈非空)
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示空栈
}
int value = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
// 主函数示例
int main() {
StackNode* stack = initStack();
int choice;
while (1) {
printf("\n1. Push element\n2. Peek at top element\n3. Pop element\n4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
int input;
printf("Enter an integer to push: ");
scanf("%d", &input);
push(&stack, input);
break;
case 2:
int topElement = peek(stack);
if (topElement != -1)
printf("Top element: %d\n", topElement);
else
printf("No elements in the stack.\n");
break;
case 3:
int poppedElement = pop(&stack);
if (poppedElement != -1)
printf("Popped element: %d\n", poppedElement);
else
printf("Stack is empty.\n");
break;
case 4:
exit(0); // 结束程序
break;
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
阅读全文