| Код | #include <stdio.h> #include <stdlib.h> #include <stdbool.h>
struct TStack { unsigned char ch; struct TStack* next; };
//----------------------------------------------// struct TStack* Push(struct TStack** stack, unsigned char ch) { struct TStack* node = malloc(sizeof(struct TStack)); node->ch = ch; node->next = *stack; *stack = node;
return *stack; } //----------------------------------------------// struct TStack* Pop(struct TStack** stack) { struct TStack* node = *stack; *stack = (*stack)->next;
free(node); return *stack; } //----------------------------------------------// void Print(struct TStack* stack) { while (stack) { printf("[%c=%03u] ", stack->ch, (unsigned) stack->ch); stack = stack->next; } printf("\n"); } //----------------------------------------------// struct TStack* Max(struct TStack* stack, struct TStack** prev) { if (prev != NULL) { *prev = NULL; } struct TStack* max = stack; for (; stack && stack->next; stack = stack->next) { if (max->ch < stack->next->ch) { max = stack->next; if (prev != NULL) { *prev = stack; } } } return max; } //----------------------------------------------// bool DeleteMax(struct TStack** stack) { struct TStack* prev = NULL; struct TStack* node = Max(*stack, &prev); if (node == NULL) { return false; } if (prev == NULL) { Pop(stack); } else { struct TStack* tmp = node; prev->next = tmp->next; free(tmp); } return true; } //----------------------------------------------//
int main(int argc, const char** argv) { struct TStack* stack = NULL; unsigned char ch;
while ((ch = getchar()) != '\n') { Push(&stack, ch); }
if (stack == NULL) { return EXIT_FAILURE; } Print(stack);
DeleteMax(&stack);
Print(stack);
return EXIT_SUCCESS; }
|
http://s1.ipicture.ru/
|