Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
19.04.2015
Размер:
31.23 Кб
Скачать

Лабораторная работа №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);

}

}

Задания

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

  2. Описать функцию, которая находит среднее арифметическое значение всех элементов списка.

  3. Описать функцию, которая заменяет в списке все вхождения элемента E1, значение которого введено с клавиатуры, на элемент E2, значение которого также введено с клавиатуры.

  4. Описать функцию, которая подсчитывает число вхождений элемента Е, значение которого введено с клавиатуры.

  5. Описать функцию, которая формирует список М1 - копию списка М и список М2, представляющий собой ”перевернутый” список М.

  6. Описать функцию, которая вставляет в список К новый элемент L1 за каждым вхождением элемента L. Значения элементов L и L1 ввести с клавиатуры.

  7. Описать функцию, которая формирует список Common, включив в него элементы, которые входят одновременно в список М1 и М2.

  8. Описать функцию, которая включает в упорядоченный по убыванию список новое значение, введенное с клавиатуры, таким образом, чтобы не нарушать упорядоченность.

  9. Описать функцию, которая объединяет два упорядоченных по невозрастанию списка в один упорядоченный по невозрастанию список.

  10. Описать функцию, которая формирует список L, включая в него элементы, которые входят в один из списков L1 или L2, но не входят в другой.

  11. Описать функцию, которая вставляет в список L за первым вхождением элемента I, значение которого введено с клавиатуры, все элементы списка S.

Домашнее задание.

Выберите задание о правилу “Номер варианта”+3. Реализуйте задачу используя двусвязный список.

Соседние файлы в папке mod3