#U0424#U0443#U043d#U043a#U0446#U0438#U0438 #U043a #U0440#U043a

Посмотреть архив целиком
// ConsoleApplication61.cpp: определяет точку входа для консольного приложения.
//

// ConsoleApplication59.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "limits.h"
#include
#include

struct Node { //узел односвязного списка
double info;
Node* next;
};


struct List {
Node* top, *bottom;
};

struct Iterator { //вспомогательный указатель
Node* current;
};

List initList(); //инициализация списка
void push(List &L, double inf); //добавление элемента в голову списка
void push_end(List &L, double inf); //добавление элемента в хвост списка
bool pop(double& inf, List& L); //удаление элемента из головы списка
void clear(List& L); //очистка списка
bool get(double& inf, const List& L); //получение информации из головы списка
bool empty(const List& L); //проверка состояния списка
Iterator begin(List& L); //установление итератора в голову списка
Iterator end(List& L); //установление итератора в хвост списка
bool next(Iterator& I); //перемещение итератора на следующий узел
bool add(List &L, Iterator &I, double inf); //добавление узла после узла, на который установлен итератор
bool del(double& inf, List &L, const Iterator &I); //удаление узла, расположенного после узла, на который установлен итератор
double get(const Iterator &I); //получение информационной части узла, на который установлен итератор
double getNext(const Iterator &I); //получение информационной части узла следующего за тем, на который установлен итератор
bool check(const Iterator &I); //установлен ли итератор на список
bool set(Iterator& I, double inf); //замена информационной части узла, на который установлен итератор
bool setNext(Iterator& I, double inf); //замена информационной части узла, следующего за тем, на который установлен итератор
int insertSort(List &L, double inf); //добавление элементов в список так, чтобы они располагались в порядке возрастания


void scanfList(List& L); //ввод списка
void printList(List& L); //вывод списка
void swap(Iterator &I, Iterator &J); //swap
void polotr(List& L); //замена всех отрицательных элементов списка на 0

void main() {
Iterator I, J;
List L = initList();
scanfList(L);
printList(L);
I = begin(L);
J = end(L);
swap(I, J);
printList(L);
}

List initList() {
List L = { 0, 0 };
return L;
}

void push(List &L, double inf)
{
Node *work = new Node;
work->info = inf;
work->next = L.top;

if (!L.top)
L.bottom = work;

L.top = work;
}

bool pop(double& inf, List& L)
{
if (!L.top) return false;

Node* work = L.top;
L.top = L.top->next;
inf = work->info;
delete work;

return true;
}

void clear(List& L)
{
while (L.top)
{
Node* work = L.top;
L.top = L.top->next;

delete work;
}
L.bottom = 0;
}

bool get(double& inf, const List& L)
{
return L.top ? (inf = L.top->info, true) : false;
}

bool empty(const List& L)
{
return !L.top;
}

Iterator begin(List& L)
{
Iterator I = { L.top };

return I;
}

Iterator end(List& L)
{
Iterator I = { L.bottom };

return I;
}

bool next(Iterator& I)
{
return I.current ? (I.current = I.current->next, true) : false;
}

bool add(List &L, Iterator &I, double inf)
{
if (!I.current && L.top) return false;

Node* work = new Node;
work->info = inf;
if (!L.top)
{
work->next = 0;
L.top = L.bottom = I.current = work;
}
else if (!I.current->next)
{
work->next = 0;
L.bottom = I.current->next = work;
}
else
{
work->next = I.current->next;
I.current->next = work;
}

return true;
}

bool del(double& inf, List &L, const Iterator &I)
{
if (!L.top || !I.current || !I.current->next) return false;

Node* work = I.current->next;

inf = work->info;

I.current->next = work->next;
if (!work->next)
{
L.bottom = I.current;
}
delete work;

return true;
}

double get(const Iterator &I)
{
return I.current ? I.current->info : 0.;
}

double getNext(const Iterator &I)
{
return I.current && I.current->next ? I.current->next->info : 0.;
}

bool check(const Iterator &I)
{
return I.current;
}

bool operator ==(const Iterator& I1, const Iterator& I2)
{
return I1.current == I2.current;
}

bool operator !=(const Iterator& I1, const Iterator& I2)
{
return I1.current != I2.current;
}

bool set(Iterator& I, double inf)
{
if (!I.current) return false;

I.current->info = inf;

return true;
}

bool setNext(Iterator& I, double inf)
{
if (!I.current || !I.current->next) return false;

I.current->next->info = inf;

return true;
}

void printList(List& L)
{
for (Iterator I = begin(L); check(I); next(I))
printf("%7.3lf", get(I));
printf("\n");
}

int insertSort(List &L, double inf)
{
int Pos = 0;
Iterator I = begin(L);

if (!check(I) || get(I) >= inf)
push(L, inf);
else
{
for (Pos = 1; I != end(L) && getNext(I) < inf; next(I), Pos++);

add(L, I, inf);
}

return Pos;
}

void scanfList(List& L)
{

int n;
printf("Введите количество: ");
scanf("%i", &n);


for (int i = 0; i < n; i++) {
Iterator I = begin(L);
int a;
scanf("%d", &a);
push_end(L, a);
}




}

void polotr(List& L) {
for (Iterator I = begin(L); check(I); next(I)) {
if (get(I) > next(I)) {
set(I, 0);
}
}

printList(L);
}

void push_end(List &L, double inf)
{
Node *work = new Node;
work->info = inf;
work->next = 0;

if (L.bottom)
L.bottom->next = work;
L.bottom = work;
if (!L.top)
L.top = work;
}

void swap(Iterator &I, Iterator &J)
{
double Temp = get(I);
set(I, get(J));
set(J, Temp);
}

Случайные файлы

Файл
descript.ion.txt
info.txt
Readme.txt
readme.txt
h.txt




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.