栈是只允许在一端插入数据元素并且只在同一端删除的先进后出类型的线性数据结构。 元素出栈时必须测试栈是否为空,如果为空则删除操作产生异常。编写程序测试清空栈的操 作是否正常。要求:使用异常处理结构设计程序。
时间: 2023-03-31 22:01:05 浏览: 151
以下是一个使用异常处理结构设计的测试清空栈操作的程序:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
void clear(Stack *s) {
while (!is_empty(s)) {
pop(s);
}
}
int main() {
Stack s;
init(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
clear(&s);
printf("Stack cleared\n");
return ;
}
在这个程序中,我们定义了一个 Stack 结构体,其中包含一个数组和一个指向栈顶的指针 top。我们使用 init 函数初始化栈,使用 is_empty 和 is_full 函数判断栈是否为空或已满,使用 push 函数向栈中插入元素,使用 pop 函数从栈中删除元素,并使用 clear 函数清空栈。
在 clear 函数中,我们使用 while 循环不断调用 pop 函数,直到栈为空为止。如果在 pop 函数中发现栈已经为空,则使用异常处理结构打印出 Stack underflow 的错误信息并退出程序。
在 main 函数中,我们先向栈中插入三个元素,然后调用 clear 函数清空栈。如果 clear 函数正常工作,则应该输出 Stack cleared 的信息。
阅读全文