c语言删除堆栈顶部元素
时间: 2023-12-14 18:05:36 浏览: 33
要删除堆栈顶部元素,可以先判断堆栈是否为空,如果不为空,则可以先将栈顶元素弹出,然后更新栈顶指针的位置。具体实现可以参考下面这段代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Stack {
int data[MAXSIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isStackEmpty(Stack *s) {
return s->top == -1;
}
int isStackFull(Stack *s) {
return s->top == MAXSIZE - 1;
}
void push(Stack *s, int x) {
if (isStackFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isStackEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
int peek(Stack *s) {
if (isStackEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top];
}
void deleteTop(Stack *s) {
if (isStackEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
s->top--;
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("Before delete top element: ");
while (!isStackEmpty(&s)) {
printf("%d ", peek(&s));
deleteTop(&s);
}
printf("\n");
return 0;
}
```
在上面的代码中,我们定义了一个结构体 Stack,其中 data 数组用于存储堆栈元素,top 变量表示栈顶指针的位置。initStack 函数用于初始化堆栈,isStackEmpty 函数用于判断堆栈是否为空,isStackFull 函数用于判断堆栈是否已满。push 函数用于将元素压入堆栈,pop 函数用于弹出堆栈顶部元素,peek 函数用于获取堆栈顶部元素的值,deleteTop 函数用于删除堆栈顶部元素。在主函数中,我们先将元素 1、2、3 压入堆栈,然后依次删除堆栈顶部元素,并打印出删除前的堆栈元素。