用c语言实现:定义一个返回值为int 的函数方法delMax ,传递参数为Stack &s,用于通过调用出栈、入栈函数,将值最大的元素排出栈外,其他顺序不变(如果有相同的最大值,删除自栈顶像栈底遇到的第一个)
时间: 2024-11-07 22:13:46 浏览: 18
在C语言中,我们可以创建一个名为`delMax`的函数,它接收一个指向栈的引用`Stack& s`。这个栈应该包含一个结构体`Node`,其中包含一个整数值`data`和一个指向下一层的指针`next`。我们需要借助辅助变量来找到最大值,并逐步将其从栈中移除。
首先,我们假设已经实现了`push`和`pop`操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 栈结构体
typedef struct Stack {
Node* top;
} Stack;
// 创建新节点
Node* newNode(int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->next = NULL;
return node;
}
// 入栈
void push(Stack* s, int value) {
Node* newNode = newNode(value);
newNode->next = s->top;
s->top = newNode;
}
// 出栈
int pop(Stack* s) {
if (s->top == NULL) {
printf("Stack is empty.\n");
exit(1);
}
int max_value = s->top->data;
Node* temp = s->top;
s->top = s->top->next;
free(temp);
return max_value;
}
// 删除最大值
int delMax(Stack* s) {
int max_val = INT_MIN;
Node* current = s->top;
// 找到栈中的最大值
while (current != NULL) {
if (current->data > max_val) {
max_val = current->data;
}
current = current->next;
}
// 删除所有大于等于max_val的元素
current = s->top;
while (current != NULL) {
if (current->data >= max_val) {
Node* temp = current;
current = current->next;
free(temp); // 释放内存
} else {
break;
}
}
return max_val; // 返回最后一个最大值
}
阅读全文