已知堆栈的定义为typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack,用c语言实现栈从大到小的排列
时间: 2024-12-18 15:29:54 浏览: 7
C语言用栈实现十进制转换为二进制的方法示例
5星 · 资源好评率100%
在C语言中,为了实现一个栈从大到小的排列,我们可以首先创建一个` SqStack`结构体,然后定义两个函数:`push()`用于入栈,`popMax()`用于弹出并返回当前栈中最大的元素。这里假设`SElemType`是可比较的整数或其他支持比较的数据类型。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
SElemType *base; // 栈底指针
SElemType *top; // 栈顶指针
int stacksize; // 栈容量
} SqStack;
// 函数声明
void push(SqStack* stack, SElemType value);
SElemType popMax(SqStack* stack);
// 入栈操作
void push(SqStack* stack, SElemType value) {
if (stack->top - stack->base + 1 == stack->stacksize) {
printf("Stack is full.\n");
return;
}
stack->top++;
*stack->top = value;
}
// 弹出最大元素(并更新栈顶)
SElemType popMax(SqStack* stack) {
if (stack->top == stack->base) {
printf("Stack is empty.\n");
return 0;
}
SElemType max_value = *stack->top;
SElemType temp = *stack->top;
while (stack->top > stack->base && temp > *(--stack->top)) {
temp = *stack->top;
}
*stack->top = temp;
stack->top--;
return max_value;
}
int main() {
SqStack s;
s.base = malloc(sizeof(SElemType) * 5); // 初始化一个小栈
s.top = s.base;
s.stacksize = 5;
// 测试栈
for (int i = 5; i >= 1; i--) {
push(&s, i);
printf("Push %d, Max on top: %d\n", i, popMax(&s));
}
free(s.base); // 释放内存
return 0;
}
```
这个程序会将输入的数字从大到小压入栈,并在每次出栈时保证栈顶元素是剩余元素中的最大值。
阅读全文