- •Лабораторные работы. Сборник задач.
- •Оглавление
- •Часть 1. Лаборатоные работы
- •Работа со структурами и объединениями …………………………………….91
- •3 Задача
- •4 Задача
- •5 Задача
- •6 Задача
- •Дополнительное условие:использование цикла с предусловием.
- •1 Задача
- •2 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функций.
- •3 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функции.
- •4 Задача
- •Дополнительное условие: программа написана без использования функции
- •Дополнительное условие: программа написана с использованием функции.
- •Самостоятельная работа
- •Лабораторная работа №3
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •Лабораторная работа №6
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •4 Задача
- •Синтаксический анализатор
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •3 Задача
- •Работа с каталогами
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •1 Задача Реализовать очередь, состоящую из целых чисел
- •Комментарий:
- •2 Задача
- •1 Задача
- •Идеально-сбалансированные деревья
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности.
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •Работа с несколькими массивами
- •Преобразование массива
- •Изменение элементов массива
- •2 Уровень сложности Формирование массива и вывод его элементов
- •Анализ элементов массива
- •Преобразование массива
- •Изменение элементов массива
- •Удаление и вставка элементов
- •Серии целых чисел
- •3 Уровень сложности Множества точек на плоскости
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •Not простое_логическое
- •(Простое_логическое знак_операции простое_логическое)
- •Построить синтаксический анализатор для понятия предложение.
- •1 Уровень сложности
- •2 Уровень сложности
- •1 Уровень сложности
- •Примеры:
- •Двусвязные списки
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
1 Задача
Записать в стек 3 целых числа и удалить их.
Файл <Stack.h>
# define STACK struct stack
STACK
{
int info;
STACK *next;
};
// добавление в стек нового элемента
void push(STACK **s, int item);
// изъятие элемента с «верхушки» стека
int pop(STACK **s, int *error);
// удалиение из стека элемента, который был записан последним
int peek(STACK **s, int *error);
// если в стеке имеется хотя бы один элемент, то error = 0
Файл «stack.cpp»
# include <stdio.h>
# include "stack.h"
STACK *s1,*s2;
void main()
{
int error;
// добавление в стек 1
push(&s1,1);
printf("peek(s1) = %d ", peek(&s1,&error));
// добавление в стек 2
push(&s1,2);
printf("peek(s1) = %d ", peek(&s1,&error));
// добавление в стек 3
push(&s1,3);
printf("peek(s1) = %d \n", peek(&s1,&error));
push(&s2,pop(&s1,&error));
push(&s2,pop(&s1,&error));
push(&s2,pop(&s1,&error));
printf("pop(&s2) = %d\n ", pop(&s2,&error));
printf("pop(&s2) = %d\n ", pop(&s2,&error));
printf("pop(&s2) = %d\n ", pop(&s2,&error));
}
«stack_fun.cpp»
#include <malloc.h>
#include "stack.h"
// добавление в стек нового элемента
void push(STACK **s, int item)
{
STACK *new_item;
new_item=(STACK *)malloc(sizeof(STACK));
new_item->info=item;
new_item->next=*s;
*s=new_item;
}
// взятие элемента с «верхушки» стека
int pop(STACK **s, int *error)
{
STACK *old_item=*s;
int old_info=0;
if (*s)
{
old_info = old_item -> info;
*s = (*s)->next;
free(old_item);
* error = 0;
}
else
*error = 1;
return (old_info);
}
//удаление из стека элемента
int peek(STACK **s, int *error)
{
if (*s)
{
*error =0;
return (*s)->info;
}
else
{
*error = 1;
return 0;
}
}
Комментарий:
Стек – это специальная область памяти, котороая предоставляет собой очередь типа “последний пришел – первый ушел”. Элемент добавленный в стек последним, будет вынут из него первым.
2 Задача
Реализовать стек в виде списка.
Файл <Stack.h>
// описание структуры типа - стек
typedef struct node
{
int info;
struct node*next;
}Node;
// задание типа указателя на структуру стек
typedef Node* List;
// инициализация стека
void InitializeList(List*plist);
// проверка пусты стека
bool ListEmpty(List plist);
// функция добавления одного элемента в стек
bool AddItem(int x,List*plist);
//печать всех элементов стека
void PrintList(List plist);
«stack.cpp»
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
void main()
{
List m;
char ch;
int x;
InitializeList(&m);
puts("Do you want to put element?");
ch=getchar();
while(ch=='y')
{
scanf("%d",&x);
AddItem(x,&m);
puts("Do you want to put element?");
getchar();
ch=getchar();
}
PrintList(m);
}
«stack_fun.cpp»
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
void InitializeList(List*plist)
{
*plist=NULL;
}
bool ListEmpty(List plist)
{
if(plist==NULL)
return true;
else
return false;
}
bool AddItem(int x, List* plist)
{
Node *p_new;
p_new=(Node*)malloc(sizeof(Node));
if(p_new==NULL)
return false;
p_new->info=x;
p_new->next=*plist;
*plist=p_new;
return true;
}
void PrintList(List plist)
{
Node *p_curr=plist;
if(ListEmpty(plist)==true)
printf("List is empty");
else
{
while(p_curr!=NULL)
{
printf("%d\n",p_curr->info);
p_curr=p_curr->next;
}
}
}
Самостоятельная работа
Разработать программу вычисления многочлена
в точке .
Лабораторная работа №17
Работа с абстрактными типами данных. Очередь. Двусвязный список.
Цель: закрепление на практике знаний работы с очередью и двухсвязным списком.
Методические рекомендации: лабораторная работа рассчитана на 2 часа и состоит из анализа двух разобранных заданий и решения самостоятельной работы.
Обязательное зачетное задание.
Необходимый уровень знаний.
работа с указателями;
работа со структурами.