Главная

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

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

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

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

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Дан файл целых чисел компоненты которого различны, сформировать циклический линейный список, задать число n и удалять n-ый элемент в списке пока не останется 1




//подключение внешних модулей

#include "stdio.h"

#include "string.h"

#include "io.h"

#include "fcntl.h"

#include <sys/stat.h>

//описание структуры списка

struct list{

int el;

list *next;

};

int fh;//заголовок файла

void main()//the main function

{

fh = -1;//file handle set -1(error)

list *fst,*tek;//создаем элементы списка

fh = _open("tmp.file", _O_WRONLY|_O_CREAT);

//создаем типизированный файл

printf("vvedite chislo i = ");

int i;

scanf("%d",&i);

do{//заполняем файл пока не введем 999

int j = _write(fh,&i,sizeof(int));//запись

if(j<=0) printf("error write");// если не удалось записать

printf("vvedite chislo(konechnii element 999) i = ");

scanf("%d",&i);//получаем переменную из вх потока

}while(i!=999);

_close(fh);//закрываем файл

fh = _open("tmp.file",_O_RDONLY);//открываем для чтения

bool is_first = true;//флаг для создания первого ел-та

printf("QUEUE:\n");

while(!_eof(fh))// пока не конец файла

{//читаем ф-л и создаем циклический список

_read(fh,&i,sizeof(int));

printf("%d ",i);

list * ll = new list;

ll ->el = i;

if(is_first){

is_first =!is_first;

ll ->next = ll;//pointer to itself

fst = ll;

tek = ll;

}else{

ll ->next = fst;

tek ->next = ll;

tek = ll;

}}// end of list construction

printf("\nVvedite nomer elementa dla udalenia(>0) j= ");

int j,c=0;

scanf("%d",&j);

list * dd = fst;

list *prew = fst;

//удаляем элемент с заданным числом из списка

while(dd->next!=dd){//пока не ост-ся один елемент

if(c == j){//удаление если счетчик равен заданному числу

c = 0;

prew->next = dd->next;

delete dd;

printf("delete\n");

}else{//иначе идем дальше

prew = dd;

dd = dd->next;

c++; }

}printf("Ostavsheesa chislo n = %d",dd->el);//выводим

}//оставшееся число

 






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

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