Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
04_ЛР-1601(1).doc
Скачиваний:
15
Добавлен:
29.08.2019
Размер:
94.72 Кб
Скачать

Оглавление

Общие указания к выполнению лабораторной работы 2

Цель работы 2

Постановка задачи 2

Последовательность выполнения 2

Методический пример 2

Отчет по лабораторной работе 6

Контрольные вопросы 6

Литература 8

Общие указания к выполнению лабораторной работы

Лабораторные работы выполняются на персональных компьютерах в операционной среде Windows с установленной системой Visual Studio C++. Указания по технике безопасности совпадают с требованиями, предъявляемыми к пользователю ЭВМ. Другие опасные и вредные факторы отсутствуют.

Цель работы

Целью лабораторной работы является ознакомление с методами работы с динамическими элементами с использованием структур.

Постановка задачи

Разработать программный продукт в соответствии с основными методами работы с динамическими элементами по конкретному варианту задания.

Последовательность выполнения

Для выполнения лабораторной работы «Освоение работы с динамическими элементами(списки) с использованием структур.» необходимо:

  1. Ознакомиться с основными элементами теории создания списков и использования данных, типа структура, для их создания.

  2. В соответствии с заданным вариантом написать программу, решающую конкретную задачу.

Работа считается выполненной только после создания программы и защиты ее у преподавателя.

Методический пример

Задание: создать 2 двунаправленный список элементов целого типа и поиск в них чисел соответствующих числу введенному с клавиатуры. Если такие числа есть в первом списке, то они добавляются в конец второго списка, и наоборот.

#include <stdio.h>

#include <stdlib.h>

#include <iostream.h>

#include <conio.h>

void main()

// объявление структуры элемента списка

// и указателей на требуемые элементы

struct el { struct el* pred;

int ELEM;

struct el* posl;

}

EL1,*pTEK,*pPRED,*temp, *pSTART1,*pEND1,*pSTART2,*pEND2;

int i,z,flag=0;

clrscr();

// бесконечный цикл для ввода элементов первого списка

// так как количество элементов неизвестно

for(;;)

{

cout<<"\nввести элемент?";cin>>z;

if (z<1) break;

pTEK=(struct el*)(malloc(sizeof(EL1))); //выделенная память //заносится в указатель

//на текущий элемент

cout<<" \nэлемент=";cin>>pTEK->ELEM; //первоначальное

//опреде-

pTEK->pred=0; //ление полей элемента

pTEK->posl=0; // списка

//при создании первого элемента сохраняются соответствующие адреса

if(flag==0){pSTART1=pTEK;pPRED=pTEK;

pEND1=pTEK;flag=1; continue;}

pPRED->posl=pTEK; // заполнение полей

pTEK->pred=pPRED; // элементов списка

pEND1=pPRED=pTEK; // изменение указателей на конец списка // и предыдущий элемент

}

// вывод на экран первого списка

pTEK=pSTART1;

cout<<"\nадрес нач элем:"<<pSTART1;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

cout<<"\nадрес кон элем:"<<pEND1;

// бесконечный цикл для ввода элементов второго списка

// так как количество элементов неизвестно

flag=0;

for(;;){

cout<<"\n ввести элемент:";cin>>z;

if (z<1) break;

pTEK=(struct el*)(malloc(sizeof(EL1)));

cout<<"\n элемент=";cin>>pTEK->ELEM;

pTEK->pred=0;

pTEK->posl=0; if(flag==0){pSTART2=pTEK;pPRED=pTEK;pEND2=pTEK;flag=1;

continue;}

pPRED->posl=pTEK;

pTEK->pred=pPRED;

pEND2=pPRED=pTEK;

}

// вывод на экран второго списка

pTEK=pSTART2;

cout<<"\nадрес нач элем:"<<pSTART2;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

cout<<"\nадрес кон элем:"<<pEND2;

int ch,d;

cout<<"\nВвести число для проверки ";

cin>>ch;

// поиск искомого числа в первом списке и добавление его

// в конец второго списка

flag=0; //flag указание на начало работы с первым эл

pTEK=pSTART1;

for(;;){

temp=pTEK->posl; // в temp хранится адрес послед элем списка

// что требуется для выхода из цикла

if(pTEK->ELEM!=ch)

if (temp==0) break;

{pTEK=pTEK->posl;flag=1;

continue;}

if(flag==0)pSTART1=pTEK->posl;//если начальный элемент списка

//удаляется то изменяется

//начальный адрес списка ((pTEK->pred)->posl)=(pTEK->posl); // перезапися адресов впер-

((pTEK->posl)->pred)=(pTEK->pred); // вом списке

pEND2->posl=pTEK; //добавлениеэлемента в

pTEK->posl=0; // конец второго списка, и

pTEK->pred=pEND2; // настройка

//соответствующих

pEND2=pTEK; // полей элем

pTEK=temp; // занесение в указатель

// адреса след элем

// вывод на экран первого списка

cout<<"\n--------------------------";

pTEK=pSTART1;

cout<<"\nадрес нач элем:"<<pSTART1;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

// вывод на экран второго списка

pTEK=pSTART2;

cout<<"\nадрес нач элем:"<<pSTART2;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

cin>>d;

/* добавление в первый список */

flag=0;

pTEK=pSTART2;

for(;;)

temp=pTEK->posl;

if(pTEK->ELEM!=ch)

if (temp==0) break;

pTEK=pTEK->posl;flag=1;

continue;

if(flag==0)pSTART2=pTEK->posl;

((pTEK->pred)->posl)=(pTEK->posl);

((pTEK->posl)->pred)=(pTEK->pred);

pSTART1->pred=pTEK;

pTEK->pred=0;

pTEK->posl=pSTART1;

pSTART1=pTEK;

pTEK=temp;

cout<<"\n--------------------------";

pTEK=pSTART1;

cout<<"\nадрес нач элем:"<<pSTART1;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

pTEK=pSTART2;

cout<<"\nадрес нач элем:"<<pSTART2;

do

cout<<"\n "<<pTEK->pred<<" "<<pTEK->ELEM<<" "<<pTEK->posl;

pTEK=pTEK->posl;

while(pTEK!=0);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]