Файл: Практическая работа 2 Динамические структуры данных Списки.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.10.2023

Просмотров: 179

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
void del (QUEUE **pbeg){QUEUE *old_item = *pbeg;if(*pbeg){*pbeg =(*pbeg)->next;free(old_item);}}Пример. Пусть из очереди, состоящей из трех элементов (‘a’,’b’,’c’), необходимо удалить элемент ‘b’. В этом случае необходимо удалить элемент из середины очереди.Функция удаления элемента из середины очереди:

void del_mid(QUEUE **pbeg)

{

QUEUE *current = *pbeg;

QUEUE *previous = 0;

while(current->info!=’b’)

{

previous = current;
current = current->next;

}

previous->next = current->next;

free(current);

}

//*pbeg – указатель на первый элемент очереди

//текущий элемент очереди

//предыдущий элемент очереди

//пока поле info текущего элемента не содержит символ ‘b’

//указатель previous указывает на тот же элемент, что и указатель current

//перемещение указателя current на следующий по отношению к текущиму элемент

//следующим после предыдущего элемента становится следующий по отношению к текущему элемент

//уничтожаем элемент current
На рис. 9 показано происходящее после каждого шага изменения.Рис. 9 – Удаление элемента из середины очереди

  1. Пример реализации программы
3.1 Пример программы с использованием стекаПрограмма реализует простой калькулятор с четырьмя действиями.#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "locale.h"#define STACK struct ListSTACK{int info;STACK *next;};void push(STACK **top, int item);int del (STACK **top);int _tmain(int argc, _TCHAR* argv[]){STACK *s = 0; int a, b;char str[80];setlocale(LC_ALL,"Russian");printf("Калькулятор с четырьмя действиями\n");printf("Нажмите 'q' для выхода\n");do{printf(": ");gets(str);switch(*str){case '+':a = del(&s);b = del(&s);printf("%d\n", a+b);push(&s,a+b);break;case '-':a = del(&s);b = del(&s);printf("%d\n", b-a);push(&s,b-a);break;case '*':a = del(&s);b = del(&s);printf("%d\n", b*a);push(&s,b*a);break;case '/':a = del(&s);b = del(&s);if(a==0){printf("Деление на 0.\n");break;}printf("%d\n", b/a);push(&s,b/a);break;case '.':a = del(&s);push(&s,a);printf("Текущее значение вершины стека: %d\n", a);break;default:push(&s,atoi(str));}}while(*str != 'q');return 0;}void push (STACK **top, int item){STACK *new_item;new_item = new STACK;new_item->info = item;new_item->next=*top;*top = new_item;}int del (STACK **top){STACK *old_item = *top;int item;
if(*top){ item = (*top)->info;*top =(*top)->next;free(old_item);return item;}return 1;}3.2 Пример программы с использованием очередиПрограмма реализует мини-планировщик событий:#include "stdafx.h"#include "string.h"#include "stdlib.h"#include "stdio.h"#include "ctype.h"#define QUEUE struct ListQUEUE{char *info;int num;QUEUE *next;};void insert(QUEUE **pbeg, char *item, int number);void del(QUEUE **pbeg);void enter(int *spos, QUEUE **q);void review(QUEUE **q);int _tmain(int argc, _TCHAR* argv[]){char s[80];int spos=0;QUEUE *q=0;for(;;){printf("Enter, List, Remove, Quit: ");gets(s);*s = toupper(*s);switch(*s){case 'E':enter(&spos,&q);break;case 'L':review(&q);break;case 'R':del(&q);break;case 'Q':exit(0);}}return 0;}void insert(QUEUE **pbeg, char *item, int number){QUEUE *current = *pbeg;QUEUE *previous = 0;QUEUE *new_node;while (current){previous = current;current = current -> next;}new_node = new QUEUE;strcpy(new_node->info, item);new_node->num = number;if (previous){new_node->next = 0;previous->next = new_node;}else{*pbeg = new_node;(*pbeg)->next = 0;}}void del (QUEUE **pbeg){QUEUE *old_item = *pbeg;if(*pbeg){printf("%d: %s\n",(*pbeg)->num,(*pbeg)->info);*pbeg =(*pbeg)->next;free(old_item);}}void enter(int *spos, QUEUE **q){char *s;QUEUE *q1=*q;s = new char;do{printf("Enter appointment %d: ", spos+1);gets(s);if(*s==0)break;spos++;insert(&q1,s,spos);*q = q1;}while(*s);}void review(QUEUE **q){QUEUE *temp = *q;while(temp){printf("%d. %s\n", temp->num, temp->info);temp = temp->next;}}

  1. Варианты заданий к практической работе №2
Вариант 1

  1. Составить программу, которая содержит текущую информацию о заявках на авиабилеты.
Каждая заявка включает:

  • пункт назначения;

  • номер рейса;

  • фамилию и инициалы пассажира;

  • желаемую дату вылета.

  1. Программа должна обеспечивать:

  • хранение всех заявок в виде односвязного списка (очередь);

  • добавление заявок в список;

  • удаление заявки пассажира, фамилия которого введена с клавиатуры;

  • вывод всех заявок;

  • вывод заявок по заданному пункту назначения.

  1. Программа должна обеспечивать диалог с помощью меню.
Вариант 2

  1. Составить программу, которая содержит текущую информацию об успеваемости студентов.
Сведения о студентах включают:


  • фамилия и инициалы;

  • номер группы;

  • успеваемость (массив из пяти элементов).

  1. Программа должна обеспечивать:

  • хранение сведений обо всех студентах в виде односвязного списка (очередь);

  • добавление данных о новых студентах;

  • удаление данных о студенте, фамилия которого введена с клавиатуры;

  • вывод сведений обо всех студентах;

  • по запросу выводятся сведения о студентах, которые имеют оценки 4 и 5.

  1. Программа должна обеспечивать диалог с помощью меню.
Вариант 3

  1. Составить программу, которая содержит текущую информацию об успеваемости студентов.
Сведения о студентах включают:

  • фамилия и инициалы;

  • номер группы;

  • успеваемость (массив из пяти элементов).

  1. Программа должна обеспечивать:

  • хранение сведений обо всех студентах в виде односвязного списка (очередь);

  • добавление данных о новых студентах;

  • удаление данных о студенте, фамилия которого введена с клавиатуры;

  • вывод сведений обо всех студентах;

  • по запросу выводятся сведения о студентах, которые имеют хотя бы одну оценку 2.

  1. Программа должна обеспечивать диалог с помощью меню.
Вариант 41) Составить программу, которая содержит текущую информацию об успеваемости студентов.Сведения о студентах включают:

  • фамилия и инициалы;

  • номер группы;

  • успеваемость (массив из пяти элементов).

  • Программа должна обеспечивать:

    • хранение сведений обо всех студентах в виде односвязного списка (очередь);

    • добавление данных о новых студентах;

    • удаление данных о студенте, фамилия которого введена с клавиатуры;

    • вывод сведений обо всех студентах;

    • по запросу выводятся сведения о студентах, средний балл которых больше 4.0.

  • Программа должна обеспечивать диалог с помощью меню.


    Вариант 5

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

    Каждая заявка включает:

    • пункт назначения;

    • номер рейса;

    • фамилию пассажира;

    • желаемую дату вылета.

    1. Программа должна обеспечивать:

    • хранение всех заявок в виде односвязного списка (очередь);

    • добавление заявок в список;

    • удаление заявки пассажира, фамилия которого введена с клавиатуры;

    • вывод всех заявок;

    • вывод заявок по заданной дате вылета.


    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 6

    1. Составить программу, которая содержит текущую информацию о работниках организации.
    Сведения о работнике включают:

    • фамилия и инициалы работника;

    • название занимаемой должности;

    • год поступления на работу;

    1. Программа должна обеспечивать:

    • хранение сведений обо всех работниках в виде односвязного списка (очередь);

    • добавление новых работников в список;

    • удаление работников из списка, фамилия которого введена с клавиатуры;

    • вывод сведений обо всех работниках;

    • по запросу выводятся сведения о работниках, чей стаж работы в организации превышает значение, введенное с клавиатуры.

    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 7

    1. Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования.
    Для каждого поезда указывается:

    • пункт назначения;

    • номер поезда;

    • время отправления.

    1. Программа должна обеспечивать:

    • хранение данных в информационной системе в виде односвязного списка (очередь);

    • добавление данных о поездах в информационную систему;

    • удаление данных о поезде по введенному номеру поезда;

    • вывод информации обо всех поездах;

    • вывод информации о поездах, отправляющихся после введенного с клавиатуры времени.

    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 8

    1. Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования.
    Для каждого поезда указывается:

    • пункт назначения;

    • номер поезда;

    • время отправления.

    1. Программа должна обеспечивать:

    • хранение данных в информационной системе в виде односвязного списка (очередь);

    • добавление данных о поездах в информационную систему;

    • удаление данных о поезде по введенному номеру поезда;

    • вывод информации обо всех поездах;

    • вывод информации обо всех поездах, следующих до заданного пункта назначения.


    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 9

    1. Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования.
    Для каждого поезда указывается:

    • пункт назначения;

    • номер поезда;

    • время отправления.

    1. Программа должна обеспечивать:

    • хранение данных в информационной системе в виде односвязного списка (очередь);

    • добавление данных о поездах в информационную систему;

    • удаление данных о поезде по введенному номеру поезда;

    • вывод информации обо всех поездах;

    • вывод информации о поезде, номер которого введен с клавиатуры;

    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 10

    1. Составить программу, которая содержит информацию о наличии автобусов в автобусном парке.
    Сведения о каждом автобусе включают:

    • номер автобуса;

    • фамилию и инициалы водителя;

    • номер маршрута.

    1. Программа должна обеспечивать:

    • хранение данных обо всех автобусах в парке в виде односвязного списка (очередь);

    • добавление данных об автобусах в список при въезде каждого автобуса в парк;

    • удаление данных об автобусе из списка при выезде из парка, номер которого введен с клавиатуры;

    • вывод информации обо всех автобусах, находящихся в парке;

    • по запросу выводится информация об автобусе по введенной фамилии водителя.

    1. Программа должна обеспечивать диалог с помощью меню.
    Вариант 11

    1. Составить программу, которая содержит информацию о наличии автобусов в автобусном парке.
    Сведения о каждом автобусе включают:

    • номер автобуса;

    • фамилию и инициалы водителя;

    • номер маршрута.

    1. Программа должна обеспечивать:

    • хранение данных обо всех автобусах в парке в виде односвязного списка (очередь);

    • добавление данных об автобусах в список при въезде каждого автобуса в парк;

    • удаление данных об автобусе из списка при выезде из парка, фамилия водителя которого введена с клавиатуры;

    • вывод информации обо всех автобусах, находящихся в парке;

    • по запросу выводится информация обо всех автобусах, работающих на маршруте, номер которого введен с клавиатуры.

    1. Программа должна обеспечивать диалог с помощью меню.