2K_programuvanna / Практика / 3_mod / mod3 / lab_15-16
.docЛабораторная работа №15-16
Программирование основных операций над списком: добавление элемента в список, удаление элемента из списка, вывод списка на печать.
Цель работы: Овладеть навыками работы с линейными одоно- и дву-связанными структурами.
Пример основных операций с списком.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
typedef struct st { // элемент
int info; // элемент хранения
struct st *prev; // указатель на следующий элемент
} ELEMENT;
void add(ELEMENT **head, int item); // поместить item в
ELEMENT * find(ELEMENT *head, int item);
void print_list(ELEMENT *head);
void lremove(ELEMENT **element, int item);
void clear(ELEMENT **head);
int main(){
ELEMENT *head = NULL;
int i,value;
clrscr();
for (i = 0; i< 4; i++){
printf("Vvedite element %d:", i);
scanf("%d",&value);
add(&head,value);
}
printf("%d",find(head,9)->info);
puts("");
lremove(&head,9);
print_list(head);
clear(&head);
return 0;
}
void add(ELEMENT **head, int item){ // поместить item в список
ELEMENT * new_item;
new_item = (ELEMENT *) malloc( sizeof (ELEMENT) ); //выделяем память под новый элемент
new_item -> info = item; // присваиваем значение новому элементу
new_item -> prev = *head; // присоединяем новый элемент на вершину
*head = new_item;
}
ELEMENT * find(ELEMENT *head, int item){
while (head){
if (head -> info == item){
return head;
}
head = head->prev;
}
return NULL;
}
void print_list(ELEMENT *head){
while (head){
printf("%d ",head->info);
head = head->prev;
}
}
void lremove(ELEMENT **head, int item){
ELEMENT *tmp = NULL, *element = *head;
while (element){
if (element -> info == item){
break;
}
tmp = element;
element = element->prev;
}
if (element){
if (tmp){
tmp ->prev = element->prev;
free(element);
} else {
tmp = *head;
*head = (*head) ->prev;
free(tmp);
}
}
}
void clear(ELEMENT **head){
ELEMENT *element;
while (*head){
element = *head;
*head = (*head)-> prev;
free(element);
}
}
Задания
-
Описать функцию, которая удаляет из списка за каждым вхождением элемента Е, значение которого введено с клавиатуры, один элемент.
-
Описать функцию, которая находит среднее арифметическое значение всех элементов списка.
-
Описать функцию, которая заменяет в списке все вхождения элемента E1, значение которого введено с клавиатуры, на элемент E2, значение которого также введено с клавиатуры.
-
Описать функцию, которая подсчитывает число вхождений элемента Е, значение которого введено с клавиатуры.
-
Описать функцию, которая формирует список М1 - копию списка М и список М2, представляющий собой ”перевернутый” список М.
-
Описать функцию, которая вставляет в список К новый элемент L1 за каждым вхождением элемента L. Значения элементов L и L1 ввести с клавиатуры.
-
Описать функцию, которая формирует список Common, включив в него элементы, которые входят одновременно в список М1 и М2.
-
Описать функцию, которая включает в упорядоченный по убыванию список новое значение, введенное с клавиатуры, таким образом, чтобы не нарушать упорядоченность.
-
Описать функцию, которая объединяет два упорядоченных по невозрастанию списка в один упорядоченный по невозрастанию список.
-
Описать функцию, которая формирует список L, включая в него элементы, которые входят в один из списков L1 или L2, но не входят в другой.
-
Описать функцию, которая вставляет в список L за первым вхождением элемента I, значение которого введено с клавиатуры, все элементы списка S.
Домашнее задание.
Выберите задание о правилу “Номер варианта”+3. Реализуйте задачу используя двусвязный список.