Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Республики Молдова
Технический Университет Молдовы
Кафедра «Автоматика и информационные технологии»
Отчет
по лабораторной работе Nr.8-9.
по Структурам Данных и Алгоритмам
Выполнил ст.гр. SI-
Проверил
Задание:
Задание: Составить три файла на языке Си для реализации и использования АТД «Односвязный
список» с обеспечением указанных в теме лабораторной работы операций обработки.
1. Заголовочный файл с расширением .h для описания структуры данных элемента списка (по
вариантам), а также для прототипов функций, обеспечивающих основные операции
обработки списка.
2. Файл с расширением .cpp для определений функций (текстов функций), объявленных в
заголовочном файле.
3. Файл пользователя - функцию mаin () для обработки списка с помощью указанных в теме
лабораторной работы операций с выводом на экран меню этих операций.
4. Дополнить три файла, составленных в лабораторной работе 8 для реализации и
использования АТД «Односвязный список» с целью обеспечения всех перечисленных
специальных операций обработки списка
Мой код:
___________________________________main.cpp_________________________________________
#include "header.h"
int main()
int choice;
int Count;
2
do
scanf("%d", &choice);
switch(choice)
case 1:
FreeMemory(Head);
Head = CreateNode();
3
break;
case 16: {
return 0;
} while (1);
getch();
return 0;
4
}
_______________________________header.h______________________________________________
#include <stdio.h>
#include <iostream>
#include <limits>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
char Name[50];
char Country[50];
char Manufacturer[50];
int Vendorcode;
int Price;
} Node;
5
void FreeAllElements( Node *&head );
Node *CreateNode();
___________________________________func.cpp__________________________________________
#include "header.h"
printf(" -------------------------------------------------------------------------------------------------------\n");
printf(" | # | Name | Country | Manufacturer | Vendor code | Price |\n");
printf(" -------------------------------------------------------------------------------------------------------\n");
do {
printf(" | %d |%-12s |%-14s |%-12s |%5d |%5d | \n",
i,
temp->Name,
temp->Country,
temp->Manufacturer,
temp->Vendorcode,
temp->Price );
temp = temp->Next;
6
i++;
} while ( temp );
printf(" -------------------------------------------------------------------------------------------------------\n");
}
void PrintList( Node *head, Node *head2 )
{
printf("\n ----- 2.Print list. -----\n\n");
Print( head );
if(head == NULL)
{
printf("\n[Error] Head doesn't exist.\n\n");
return;
}
if(head == NULL)
{
printf("\nFatal: Head doesn't exist.\n\n");
return;
7
}
int buff = 0;
printf("\nSelect element #1 that you want to swap.\n> ");
scanf("%d", &buff);
if(head == NULL)
{
printf("\nFatal: Head doesn't exist.\n\n");
return;
}
int prop;
printf("\nSelect the property by which to sort:\n");
printf(" 1. Name\n");
printf(" 2. Country\n");
printf(" 3. Manufacturer\n");
printf(" 4. Vendorcode\n");
printf(" 5. Price\n");
printf("> ");
scanf("%d", &prop);
8
if(prop < 1 || prop > 5)
{
printf("\nFatal: Invalid property option.");
return;
}
int method;
printf("\nSelect the method by which to sort:\n");
printf(" 1. Descending \n");
printf(" 2. Ascending \n");
printf("> ");
scanf("%d", &method);
if(method < 1 || method > 2)
{
printf("\nFatal: Invalid method option.");
return;
}
p = b;
9
b = b->Next;
}
if (p == NULL)
{
a->Next = h;
h = a;
}
else
{
a->Next = b;
p->Next = a;
}
}
if ( h != NULL )
{
head = h;
}
}
int prop;
printf("\nSelect the property to search elements by:\n");
printf(" 1. Name\n");
printf(" 2. Country\n");
printf(" 3. Manufacturer\n");
printf(" 4. Vendorcode\n");
printf(" 5. Price\n");
printf("> ");
scanf("%d", &prop);
if(prop < 1 || prop > 5)
{
printf("\n[Error] Invalid property option.");
return;
}
char buffer[32];
printf("\nInput the query:\n> ");
fflush(stdin);
gets(buffer);
10
// cast in case we need to compare numeric values
int ibuff = strtol(buffer, NULL, 10);
printf("\nFound Entries:\n\n");
int i = 0;
do
{
int bFlag = 1;
switch(prop)
{
case 1: bFlag = strcmp(start->Name, buffer) == 0; break;
case 2: bFlag = strcmp(start->Country, buffer) == 0; break;
case 3: bFlag = strcmp(start->Manufacturer, buffer) == 0; break;
case 4: bFlag = start->Vendorcode == ibuff; break;
case 5: bFlag = start->Price == ibuff; break;
}
if(bFlag)
{
printf("- #%d \"%s \" (country: \"%s\") (manufacturer: \"%s\") (vendorcode: %d)
(price: %d)\n",
i,
start->Name,
start->Country,
start->Manufacturer,
start->Vendorcode,
start->Price);
}
i++;
start = start->Next;
11
Node *node = GetNthNodeFromHead(head, i);
if( node == NULL )
{
printf("Fatal: This index is invalid. Try another.\n\n");
return;
}
fflush(stdin);
printf("\n- Input good's name:\n> ");
gets( node->Name );
fflush(stdin);
printf("\n- Input good's vendor code:\n> ");
scanf("%d", &node->Vendorcode );
12
}
else
{
Node *temp = head;
do
{
if( temp->Next == node )
{
temp->Next = node->Next;
break;
}
temp = temp->Next;
} while ( temp->Next );
}
free(node);
}
FILE *fp;
fp = fopen("goods.txt", "w");
int count = 0;
Node *temp = head;
while(temp)
{
count++;
temp = temp->Next;
}
while(temp)
{
13
fprintf(fp, "%s\n", temp->Name);
fprintf(fp, "%s\n", temp->Country);
fprintf(fp, "%s\n", temp->Manufacturer);
fprintf(fp, "%d\n", temp->Vendorcode);
fprintf(fp, "%d\n", temp->Price);
temp = temp->Next;
}
fclose (fp);
printf("\nFile saved succesfully.");
}
FILE *fp;
fp = fopen("goods.txt", "r");
int count = 0;
fscanf(fp, "%d\n", &count);
if(count < 1)
return;
FreeMemory( head );
head = new Node;
fclose (fp);
printf("\nFile read succesfully.");
}
head2 = node;
tempA->Next = NULL;
}
lastA->Next = head2;
head2 = NULL;
}
15
int i = 0;
printf("Count: %d elements.\n", i );
}
16
temp = next;
}
if (node1->Next == node2)
{
node1->Next = node2->Next;
node2->Next = node1;
if(parent1) parent1->Next = node2;
}
else if (node2->Next == node1)
{
node2->Next = node1->Next;
node1->Next = node2;
if(parent2) parent2->Next = node1;
}
else
{
Node *temp = node1->Next;
node1->Next = node2->Next;
node2->Next = temp;
if(parent1) parent1->Next = node2;
if(parent2) parent2->Next = node1;
}
fflush(stdin);
printf("\n- Input good's name:\n> ");
gets( node->Name );
fflush(stdin);
printf("\n- Input goos's vendor code:\n> ");
17
scanf("%d", &node->Vendorcode );
return node;
}
while(node->Next != NULL)
{
i++;
node = node->Next;
}
return node;
}
return node;
}
int i = 0;
Node *temp = head;
do
{
if(temp == node)
return i;
temp = temp->Next;
i++;
return -1;
}
void FreeMemory( Node *&head )
{
if(head == NULL)
return;
} while ( node );
head = NULL;
}
Пример работы программы:
19
20
21
22
23
24
25
Вывод:
В ходе лабораторной работы номер 8-9 “ Изучение возможностей и средств языка Си для
реализации и использования основных операций обработки односвязного списка.” Я
познакомилась с понятием односвязный список и обучилась с ним взаимодействовать. Научилась
создавать односвязные и производить различные операции с ними. Свою программу я создавала
посредством проекта из 3 файлов(основного, заголовочного и файла с реализацией функций).
26