Лабораторная работа по Си динамические структуры данных

Название

Односвязный список

        Цель работы

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

Лабораторное задание

Данная работа подразумевает создание односвязного динамического списка с неограниченным количеством элементов. После ввода очередного элемента списка на экран должен выдаваться запрос об окончании ввода. Об окончании списка также может свидетельствовать ввод специального символа в 1-ое поле  элемента, например ‘*’.  Перестановка элементов списка может быть произведена двумя способами: изменением содержимого полей связей и изменением содержимого информационных полей в соответствующих элементах списка. Для выполнения лабораторной работы рекомендуется осуществлять замену первым способом.


2) Оформить структуру  данных в виде динамического списка.
3) Разработать программу, осуществляющую:
а) ввод исходных данных в список, завершение ввода должно отмечаться специальным символом (в список должно быть введено  не менее пяти записей);
б) вывод исходных данных на экран в виде таблицы;
в) перестановку местами первого и последнего элементов динамического списка;
г) вывод на экран модифицированного списка в виде таблицы;
4) Выполнить программу на компьютере и оценить правильность ее работы.
Вариант №1: одежда.




































Листинг

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>                 
#include <iostream>


struct ODEJDA
{
      char name [30];
      struct RAZM {
                             char Min[30], Max[30];
                        } razm;
      char price[30];
};
struct DYN
{
      ODEJDA str;
      DYN *n;
}*fs,*p,*q;
int i=0;
void vvodivivod()
{
      system("cls");
      setlocale (LC_ALL, "Russian");
      int f=0,j;
      char specchar='n';
      int cp = GetConsoleCP();
      const char header[] =
            "+---+-----------------+-------------------------+-----------------+\n"
            "|   |                 |         Размер          |                 |\n"
            "| № |    Название     +------------+------------+       Цена      |\n"
            "|   |                 |     мин    |    макс    |                 |\n"
            "+---+-----------------+------------+------------+-----------------+\n";
      q=new(DYN);
      printf("Введите название 1-го типа одежды: \n");
      scanf("%s",&q->str.name);
      printf("Введите минимальный размер 1-го типа одежды: \n");
      scanf("%s",&q->str.razm.Min);
      printf("Введите максимальный размер 1-го типа одежды: \n");
      scanf("%s",&q->str.razm.Max);
      printf("Введите цену на 1-й тип одежды: \n");
      scanf("%s",&q->str.price);
      fs=q;
      p=q;
      i=1;
      printf("Хотите продолжить список? (y/n)\n");
      scanf(" %c",&specchar);
      if (specchar=='y')
            f=1;
      while (f==1)
      {
            q=new(DYN);
            f=0;
            printf("Введите название %d-го типа одежды: \n", i + 1);
            scanf("%s",&q->str.name);
            printf("Введите минимальный размер %d-го типа одежды: \n", i + 1);
            scanf("%s",&q->str.razm.Min);
            printf("Введите максимальный размер %d-го типа одежды: \n", i + 1);
            scanf("%s",&q->str.razm.Max);
            printf("Введите цену на %d-й тип одежды: \n", i + 1);
            scanf("%s",&q->str.price);
            printf("Хотите продолжить список? (y/n)\n");
            scanf(" %c",&specchar);
            if (specchar=='y')
                  f=1;
            i++;
            p->n=q;
            p=q;
      };
      p->n=NULL;
      system("cls");         
      printf("%s", header);
      j=1;
      p=fs;
      SetConsoleCP(1251);
      while(j<=i)
      {
            printf("| %2d| %-15s | %10s | %10s | %15s |\n",j, p->str.name, p->str.razm.Min, p->str.razm.Max, p->str.price);
            p=p->n;
            j++;
      }
      printf("+---+-----------------+------------+------------+-----------------+\n\n\n");
      SetConsoleCP(cp);
}
void pomen()
{
      int cp = GetConsoleCP();
      if (i!=0){
            int j;
            const char header[] =
                  "+---+-----------------+-------------------------+-----------------+\n"
                  "|   |                 |         Размер          |                 |\n"
                  "| № |    Название     +------------+------------+       Цена      |\n"
                  "|   |                 |     мин    |    макс    |                 |\n"
                  "+---+-----------------+------------+------------+-----------------+\n";
            ODEJDA str1;
            DYN *p2;
            p2=new(DYN);
            p=fs;
            p2=q;
            p2->n=q;
            str1=p->str;
            p->str=p2->str;
            p2->str=str1;
            printf("Обработка выполнена\n");
            SetConsoleCP(cp);
            printf("%s", header);
            j=1;
            p=fs;
            SetConsoleCP(1251);
            while(j<=i)
            {
                  printf("| %2d| %-15s | %10s | %10s | %15s |\n",j, p->str.name, p->str.razm.Min, p->str.razm.Max, p->str.price);
                  p=p->n;
                  j++;
            }
           
            printf("+---+-----------------+------------+------------+-----------------+\n\n\n");
      };

}
void main ()
{
      setlocale (LC_ALL, "Russian");
      int cp = GetConsoleCP();
      int a;
      a=1;
      while (a!=5)
      {
            SetConsoleCP (cp);
            printf("Нажмите одну из кнопок\n");
            printf("Ввод и вывод данных - 1\n");
            printf("Перемена мест и вывод изменённой таблицы - 2\n");
            printf("Выход - 3\n");
            a=getch();
            switch(a)
            {
            case '1':vvodivivod(); break;
            case '2':pomen(); break;
            default: a=3; exit(0);
            }
      }
}




Пояснительный текст к программе

Переменные name, price, Min и Max отвечают соответственно за  введенные данные названия, цены, минимально и максимально доступного размера.



Результат работы программы

Комментариев нет:

Отправить комментарий