ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Сформировать числовой файл и отсортировать его компоненты с помощью двух стеков.#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
// Структура, описывающая элемент стека struct stack { int info; stack* prev; stack() { prev=0; info=0; } };
// Указатель на вершину стека stack *stack_top1=0; stack *stack_top2=0;
// Проверка содержимого вершины стека int top(stack **stack_top) { if((*stack_top)==0) return(0); return((*stack_top)->info); }
// Добавление элемента в стек void push(stack **stack_top, int value) { stack *p = new stack; p->info = value; p->prev = *stack_top; *stack_top = p; }
// Снятие верхнего элемента стека char pop(stack **stack_top) { char value; stack *p;
value = (*stack_top)->info; p = (*stack_top)->prev; delete *stack_top; *stack_top = p; return(value); }
// Проверка стека на пустоту int empty(stack **stack_top) { if((*stack_top)==0) return(1); return(0); }
char buffer[100];
void main() { int fh; unsigned int i, cnt=0, nbytes = 100, bytesread;
/* Open file for input: */ if((fh = _open("file.dat", _O_RDONLY)) == -1) { perror("open failed on input file"); exit(1); }
/* Read in input: */ if((bytesread = _read(fh, buffer, nbytes)) <= 0) { perror("Problem reading file"); exit(1); }
char str[100]; memset(str,0,100); int digit;
for(i=0; i<bytesread; i++) { if(buffer[i]==0x0a) continue; else { sprintf(str, "%c", buffer[i]); digit = atoi(str); if(!empty(&stack_top1)) { if(top(&stack_top1) >= digit) push(&stack_top1, digit); else { while((!empty(&stack_top1))&&(top(&stack_top1) < digit)) { push(&stack_top2, pop(&stack_top1)); } push(&stack_top1, digit); while(!empty(&stack_top2)) { push(&stack_top1, pop(&stack_top2)); } } } else { push(&stack_top1, digit); } } }
while(!empty(&stack_top1)) { printf("%d ", pop(&stack_top1)); } printf("\n"); _close(fh);
}
Не нашли, что искали? Воспользуйтесь поиском:
|