c编写程序,实现顺序栈的基本运算,并在此基础上设计一个主程序并完成下功能: (1)初始化栈s; (2)判断栈s是否非空; (3)依次进栈元素A,B,C,D,E; (4)输出栈内元素个数; (5)输出栈顶元素; (6)输出出栈序列;
时间: 2024-11-09 12:29:57 浏览: 46
2011校大学生程序设计大赛专业组题目-部分题目
3星 · 编辑精心推荐
在C语言中,我们可以使用数组和索引来模拟顺序栈的基本操作。首先,我们需要创建一个数组作为栈的存储容器,并设置一个变量top来记录栈顶元素的位置。下面是一个简单的顺序栈实现:
```c
#include <stdio.h>
#define MAX_SIZE 5
typedef struct {
int stack[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return (s-1);
}
// 进栈元素
void push(Stack *s, int element) {
if (s->top < MAX_SIZE - 1) {
s->stack[++s->top] = element;
} else {
printf("Stack overflow.\n");
}
}
// 出栈元素
int pop(Stack *s) {
if (!is_empty(s)) {
return s->stack[s->top--];
} else {
printf("Stack underflow.\n");
return -1;
}
}
// 输出栈内元素个数
void print_size(Stack *s) {
printf("Stack size: %d\n", (s->top + 1));
}
// 输出栈顶元素
void print_top(Stack *s) {
if (!is_empty(s)) {
printf("Top element: %d\n", s->stack[s->top]);
} else {
printf("Stack is empty.\n");
}
}
// 出栈序列(输出)
void print_pop_sequence(Stack *s) {
while (!is_empty(s)) {
printf("%d ", pop(s));
}
printf("\n");
}
int main() {
Stack s;
init(&s);
// (2) 初始状态检查
if (is_empty(&s)) {
printf("Stack is empty.\n");
}
// (3) 进栈元素
push(&s, 'A');
push(&s, 'B');
push(&s, 'C');
push(&s, 'D');
push(&s, 'E');
// (4) 输出栈内元素个数
print_size(&s);
// (5) 输出栈顶元素
print_top(&s);
// (6) 输出出栈序列
print_pop_sequence(&s);
return 0;
}
```
这个程序首先初始化栈,然后依次将字符'A'到'E'入栈,接着输出栈的大小、栈顶元素以及出栈序列。注意,在实际运行过程中可能会遇到栈溢出或栈底出栈的情况,这里为了简化示例,只做了简单的错误处理。
阅读全文