typedef int Item;
typedef struct stack_type* Stack;
struct node
{
Item val;
struct node* next;
};
struct stack_type
{
struct node* top;
};
static void terminate(const char* message)
{
printf("%s\n", message);
exit(EXIT_FAILURE);
}
bool is_empty(Stack s)
{
if (s->top == NULL)
{
return true;
}
else
{
return false;
}
}
Stack create(void)
{
Stack s = malloc(sizeof(struct stack_type));
if (s == NULL)
{
printf("Error: malloc failed in create.\n");
exit(EXIT_FAILURE);
}
s->top = NULL;
return s;
}
void push(Stack s, Item n)
{
struct node* new_node = malloc(sizeof(struct node));
if (new_node == NULL)
{
terminate("Error: malloc failed in push.");
}
new_node->val = n;
new_node->next = s->top;
s->top = new_node;
}
Item pop(Stack s)
{
struct node* old_top;
Item n;
if (is_empty(s) == true)
{
terminate("Error in pop: stack is empty.");
}
old_top = s->top;
n = old_top->val;
s->top = old_top->next;
free(old_top);
return n;
}
int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize)
{
Stack s = create();
int* ans = malloc(temperaturesSize * sizeof(int));
(*returnSize) = temperaturesSize;
for (int i = 0; i < temperaturesSize; i++)
{
ans[i] = 0;
}
push(s, 0);
for (int i = 1; i < temperaturesSize; i++)
{
while (is_empty(s) == false && temperatures[i] > temperatures[s->top->val])
{
int n = s->top->val;
ans[n] = i - pop(s);
}
push(s, i);
}
return ans;
}
739. 每日温度
最新推荐文章于 2024-06-13 12:40:32 发布