
- •Кафедра теоретических основ радиотехники
- •Ртф таганрог 2010
- •2. Домашнее задание
- •3. Лабораторное задание.
- •4. Содержание отчета.
- •5. Контрольные вопросы.
- •Лабораторная работа №2
- •Определение, описание и вызов функции пользователем
- •2. Домашнее задание
- •3. Лабораторное задание.
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа №3
- •2. Домашнее задание
- •3. Лабораторное задание
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа №4 Конвертор текста из кодировки ms-dos в кодировку ms Windows.
- •2. Домашнее задание
- •3. Лабораторное задание
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа №5 Применение функций.
- •2. Домашнее задание
- •3. Лабораторное задание
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа №6 Многомерные массивы, массивы динамической памяти.
- •2. Домашнее задание
- •3. Лабораторное задание.
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа №7 Линейные списки и структурированные данные.
- •2. Домашнее задание
- •Ответы на контрольные вопросы.
- •Лабораторная работа №8 Новые типы данных.
- •Выполнение домашнего задания.
- •Ответы на контрольные вопросы.
- •Лабораторная работа n 9 Работа с иерархическими структурами
- •Выполнение домашнего задания.
- •Ответы на контрольные вопросы.
- •Вопросы к защите
Лабораторная работа №7 Линейные списки и структурированные данные.
1. Цель работы: Получение навыка работы со структурами и линейными списками.
2. Домашнее задание
Разработать алгоритм и пояснить на рисунках последовательность действий, которую необходимо выполнить для того, чтобы вставить объект в начало, в конец, в середину или удалить из двухсвязного списка.
Рис 1 Двухсвязный список
Р(prior) - указатель на предыдущий элемент списка; N(next) - указатель на следующий элемент списка; begin - указатель на начало списка; О - объект или указатель на объект, вставленный в список.
2. Изучить текст программы №1.
Лабораторное задание
Набрать программу №1
//Программа №1
#include "stdafx.h"
#include<string.h>
#include<iostream>
using namespace std;
struct card { //Определение структурного типа для книги
char *author; // Ф.И.О. автора
char *title; // Заголовок книги
char *city; // Место издания
char *firm; // Издательство
int year; // Год издания
int pages; // Количество страниц
};
//Функция печати сведений о книге:
void printbook(card& car)
{ static int count = 0;
cout<<"\n"<< ++count <<". "<<car.author;
cout<<" "<<car.title<<".- "<<car.city;
cout<<": "<<car.firm<<", ";
cout<<"\n"<<car.year<<".- "<<car.pages<<" c.";
}
struct record { //Структурный тип для элемента списка (1)
card book;
record *prior;
record *next;
};
//Исходные данные о книгах:
card books[] = { //Инициализация массива структур: (2)
{ "Wiener R.S.", "Turbo C",
"M", "ST",1991, 384},
{ "Stroustrup B.","Langvige C",
"kiev","DiaSoft",1993, 560},
{ "Turbo C++.", "For programm",
"M","INTKV",1991,394},
{ "Limppman S.B.","C++ for new",
"M","GELION",1993,496}
};
void main()
{ record *begin = NULL, //Указатель начала списка (3)
*last = NULL, //Указатель на очередную запись
*list; //Указатель на элементы списка
// n-количество записей в списке:
int n = sizeof(books)/sizeof(books[0]);
// Цикл обработки исходных записей о книгах:
for (int i=0;i<n; i++)
{//Создать новую запись(элемент списка): (4)
last = new(record);
//Занести сведения о книге в новую запись:
(*last) .book.author = books[i].author;
(*last) .book.title = books[i].title;
last->book.city = books[i].city;
last->book.firm = books[i].firm;
last->book.year = books[i].year;
last->book.pages = books[i].pages;
//Включить запись в список(установить связи):
if (begin == NULL) //Списка ещё нет (5)
{last->prior = NULL;
begin = last;
last->next = NULL;
}
else
{ //Список уже существует
list = begin;
//Цикл просмотра цикла - поиск места для
//новой записи:
while (list) //(6)
{if (strcmp(last->book.author,
list->book.author) < 0 )
{//Вставить новую запись перед list:
if (begin == list)
{//Начало списка: (7)
last->prior = NULL;
begin = last;
}
else
{//Вставить между записями: (8)
list->prior->next = last;
last->prior = list->prior;
}
list->prior = last;
last->next = list;
//Выйти из цикла просмотра списка:
break;
}
if (list->next == NULL)
{//Включить запись в конец цикла: (9)
last->next = NULL;
last->prior = list;
list->next = last;
//Выйти из цикла просмотра списка:
break;
}
//Перейти к следующему элементу списка:
list = list->next;
}//Конец цикла просмотра списка
//(Поиск места для новой записи)
} //Включение записи выполнено
} //Конец цикла обработки исходных данных
//Печать в алфавитном порядке библиографического списка:
list = begin; // (10)
cout<<"\n";
while (list) {
printbook(list->book);
list = list->next;
}
getchar();
}
Отладить программу №1 (Программа является примером использования двухсвязного линейного списка.)
Написать функции вставки в начало, в середину и в конец списка объекта типа card, а также функции удаления и доступа (по индексу) к объекту типа card в списке.
Модифицировать программу №1 так, чтобы можно было с клавиатуры вводить и удалять записи в списке.
Модифицировать функции списка так, чтобы ими можно было пользоваться для организации списка произвольного типа объектов *.
Написать отчет.
Содержание отчета.