На бирже курсовых и дипломных проектов можно найти готовые бесплатные и платные работы или заказать написание уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов по самым низким ценам. Добавив заявку на написание требуемой для вас работы, вы узнаете реальную стоимость ее выполнения.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Быстрая помощь студентам

 

Работа № 100164


Наименование:


Лабораторка Односвязный список. Создать документ, в котором сохраняется информация о предметах, изъятых на таможне за отчетный период: наименование предмета, количество единиц, стоимость единицы. Определить группу предметов, составивших наибольшую стоимость изъятия

Информация:

Тип работы: Лабораторка. Предмет: Программирование. Добавлен: 03.11.2016. Сдан: 2015. Страниц: 10. Уникальность по antiplagiat.ru: < 30%

Описание (план):


Задание 1
Создать документ, в котором сохраняется информация о предметах, изъятых на таможне за отчетный период: наименование предмета, количество единиц, стоимость единицы. Определить группу предметов, составивших наибольшую стоимость изъятия.
Листинг программы (односвязный список):
#include
#include
#include
#include
using namespace std;
/*СТРУКТУРА ПРОДУКТ*/
struct Product
{
char Name[20]; //Имя
int Quantity; //Количество
float Price; //Цена
void Input(Product &product);//Вводданных в структуру
Product *Next; //Адрес на следующий элемент
};

class List
{
Product *Head; //Указатель на начало списка
public:
List():Head(NULL){};//Конструктор по умолчанию (Head=NULL)
~List();//Деструктор
void Add(Product &product);
void Show();
void Max();
};
/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО СТУДЕНТУ*/
void Product::Input(Product &product)
{
cout<cout<<"Name: "; cin.getline(Name,20); //Ввод имени
cout<<"Quantity ";cin>>Quantity; //Ввод количества
cout<<"Price ";cin>>Price; //Ввод цены
cin.ignore(); //Игнорируем символ
}
List::~List() //Деструктор класса List
{
while (Head!=NULL) //Пока по адресу есть хоть что-то
{
Product *temp=Head->Next; //Сразу запоминаем указатель на голову списка
delete Head; //Освобождаем память по месту начала списка
Head=temp; //Меняем адрес начала списка
}
}
/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Product &product)
{
cout<<"****************ADD*******************"<Product *temp=new Product; //Выделение памяти под новую
temp->Next=Head; //Указываем, что адрес следующего элемента
//Копирование содержимого параметра product
strcpy(temp->Name,product.Name);
temp->Quantity=product.Quantity;
temp->Price=product.Price;
Head=temp; //Смена адреса начала списка
ofstream out("C:/test.txt",ios::app);
out<Name<<" ";
out<Quantity<<" ";
out<Price<<" \n";

}
/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
cout<<"**************SHOW LIST*******************"<Product *temp=Head; //Объявляем указатель
while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
{
//Выводим все элементы структуры
cout<Name<<"\t"; //Вывод имени
cout<Quantity<<"\t"; //Вывод количества
cout<Price<<"\t"; //Вывод цены
temp=temp->Next; //Указываем на следующий адрес из списка
cout<}
}

void List::Max()
{
cout<<"**************MAX LIST*******************"<Product *temp=Head; //Объявляем указатель
float maxp=0, max=0;
int maxq=0;
char maxn[20];
while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
{
if(maxPrice*temp->Quantity)// проверяем условие задачи
{
max=temp->Price*temp->Quantity;
maxp=temp->Price;
maxq=temp->Quantity;
strcpy(maxn,temp->Name);
}
temp=temp->Next; //Указываем на следующий адрес из списка
}
cout<<"The most games cost products: "<cout<cout<cout<}

int main ()
{
Product product; //Обяъвили переменную, тип которой Студент
int N; //Объявили переменную -число студентов
List lst; //Объявили переменную типа Список.
cout<<"Enter numder of products for adding."<cout<<"N = ";cin>>N; //Ввели число студентов
cin.ignore(); //Игнорируем клавишу Enter
ofstream out("C:/test.txt",ios::trunc);
out.close();
for (int i=0;i{
product.Input(product); //Передаем в функцию заполнения
lst.Add(product); //Добавляем заполненную структуру в список
}
cout<lst.Show(); //Показываем список на экране
cout<lst.Max();
system("PAUSE");
}
Результат выполнения программы:

Содержание текстового файла:

Обратите внимание, что файл test.txt с результатами ввода данных (начало задания «Создать документ, в котором сохраняется информация о предметах,…», находится в корневом каталоге диска С:/.
Информация в нем при каждом запуске программы перезаписывается автоматически.
Программа для двусвязного списка отличается только введением указателя на предыдущий элемент. Весь алгоритм аналогичный, что и у односвязного списка.
Листинг программы (двосвязный список):
#include
#include
#include
#include
using namespace std;
/*СТРУКТУРА ПРОДУКТ*/
struct Product
{
char Name[20]; //Имя
int Quantity; //Количество
float Price; //Цена
void Input(Product &product);//Вводданных в структуру
Product *Next,*Prev; //Адрес на следующий элемент и предыдущий
};

class List
{
Product *Head; //Указатель на начало списка
public:
List():Head(NULL){};//Конструктор по умолчанию (Head=NULL)
~List();//Деструктор
void Add(Product &product);
void Show();
void Max();
};

/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО СТУДЕНТУ*/
void Product::Input(Product &product)
{
cout<cout<<"Name: "; cin.getline(Name,20); //Ввод имени
cout<<"Quantity ";cin>>Quantity; //Ввод количества
cout<<"Price ";cin>>Price; //Ввод цены
cin.ignore(); //Игнорируем символ
}
List::~List() //Деструктор класса List
{
while (Head!=NULL) //Пока по адресу есть хоть что-то
{
Product *temp=Head->Next;
Head->Prev=NULL;//указатель на предыдущий элемент равен нулю
delete Head; //Освобождаем память по месту начала списка
Head=temp; //Меняем адрес начала списка
}
}
/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Product &product)
{
cout<<"****************ADD*******************"<Product *temp=new Product; //Выделение памяти под новую
temp->Next=Head; //Указываем, что адрес следующего элемента
temp->Prev=NULL;//указатель на предыдущий элемент равен нулю
//Копирование содержимого параметра product
strcpy(temp->Name,product.Name);
temp->Quantity=product.Quantity;
temp->Price=product.Price;
Head=temp; //Смена адреса начала списка
ofstream out("C:/test.txt",ios::app);
out<Name<<" ";
out<Quantity<<" ";
out<Price<<" \n";

}
/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
cout<<"**************SHOW LIST*******************"<Product *temp=Head; //Объявляем указатель
while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
{
//Выводим все элементы структуры
cout<Name<<"\t"; //Вывод имени
cout<Quantity<<"\t"; //Вывод количества
cout<Price<<"\t"; //Вывод цены
temp=temp->Next; //Указываем на следующий адрес из списка
cout<}
}

void List::Max()
{
cout<<"**************MAX LIST*******************"<Product *temp=Head; //Объявляем указатель
float maxp=0, max=0;
int maxq=0;
char maxn[20];
while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
{
if(maxPrice*temp->Quantity)// проверяем условие задачи
{
max=temp->Price*temp->Quantity;
maxp=temp->Price;
maxq=temp->Quantity;
strcpy(maxn,temp->Name);
}
temp=temp->Next; //Указываем на следующий адрес из списка
}
cout<<"The most games cost products: "<cout<cout<cout<}

int main ()
{
Product product; //Обяъвили переменную, тип которой Студент
int N; //Объявили переменную -число студентов
List lst; //Объявили переменную типа Список.
cout<<"Enter numder of products for adding."<cout<<"N = ";cin>>N; //Ввели число студентов
cin.ignore(); //Игнорируем клавишу Enter
ofstream out("C:/test.txt",ios::trunc);
out.close();
for (int i=0;i{
product.Input(product); //Передаем в функцию заполнения
lst.Add(product); //Добавляем заполненную структуру в список
}
cout<lst.Show(); //Показываем список на экране
cout<lst.Max();
system("PAUSE");
}
Скриншоты аналогичные предыдущим.

1. Что представляет собой связный список? В чем разница между односвязным, двусвязным и кольцевым списками?
Связный список – это набор элементов, каждый из которых является частью узла который также содержит ссылку на узел. Связный список является структурой данных, в которой каждый элемент содержит информацию, необходимую для получения следующего элемента.
Преимущество связного списка: возможность эффективного расположения элементов.
Недостаток связного списка: медленная скорость доступа к произвольному элементу списка, так как единственным способом получения элемента является отслеживание связей от начала списка.
Каждый элемент связного списка представляет собой отдельный объект, содержащий поле для хранения информации и указатель на следующий и предыдущий элементы списка.
Различают связные списки:
1. Односвязные или одномерные списки – содержат ссылку на следующий элемент данных.
2. Двусвязные или двумерные списки – содержит ссылки как на последующий так и на предыдущий элементы списка.
3. Кольцевые или циклические – последний элемент списка содержит в качестве ссылки на следующий элемент данных ссылку на первый элемент списка.

2. Какие преимущества и недостатки связных списков в сравнении с массивами?

Преимущества: можно легко вставлять, удалять элементы, сортировать с помощью указателей. Для расположения в памяти не требует одного большого куска, а много маленьких, поэтому больше вероятность, что ему памяти хватит.
Недостатки: требует больше памяти на указатели, доступ к элементам последовательный.

3. Пояснить процесс вставки и удаления элементов односвязном списке.

Для односвязного списка существует только один вариант вставки - после заданного элемента списка. Нужно установить так, чтобы указатель Next нашего нового узла указывал на узел после заданного, а указатель Next заданного узла - на наш новый узел. Последовательность действий такая:
– выделим память поды второй элемент списка;
– записываем информацию в информационные поля;
– указателю на следующий элемент присваивают себе значение;
– присваиваем указателю на последний элемент указатель на новый элемент.
Аналогично, для удаления простейшим вариантом является удаление элемента, находящегося после заданного узла. В этом случае мы устанавливаем, чтобы указатель Next заданного узла указывал на узел, расположенный после удаляемого. После этого удаляемый узел уже выделен из списка и может быть освобожден.

4. Пояснить процесс вставки и удаления элементов в двусвязном списке.
Основные операции, выполняемые над двунаправленным списком, те же, что и для однонаправленного списка. Так как двунаправленный список более гибкий, чем однонаправленный, то при включении элемента в список, нужно использовать указатель как на элемент, за которым происходит включение, так и указатель на элемент, перед которым происходит включение.
При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы. Но так как элемент двунаправленного списка имеет два указателя, то при выполнении операций включения/исключения элемента надо изменять больше связей, чем в однонаправленном списке.
Алгоритмы вставки и удаления аналогичны предыдущему пункту, только надо использовать второй указатель.



Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть похожие работы