Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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);

 

}

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных