Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / C++.Ашарина / !Сделанные / Lab3 / Динамические структуры

.doc
Скачиваний:
36
Добавлен:
17.04.2013
Размер:
233.47 Кб
Скачать

void printf(struct Node *head)

{ struct Node *temp_ptr=head;

while(temp_ptr!=NULL)

{ printf(“%d”,temp_ptr–>data);

temp_ptr=temp_ptr–>next;

}

puts(“\n”);

}

Удаление списка из памяти.

void del(struct Node *head)

{ struct Node *temp_ptr;

while (head!=NULL)

{ temp_ptr=head;

head=head–>next;

delete temp_ptr;

}

}

Сортировка списка по убыванию.

void sort (struct Node *head)

{ struct Node *temp_ptr=head,*p,*max;

int m;

while (temp_ptr!=NULL)

{ p=temp_ptr–>link;

max=temp_ptr;

while (p!=NULL)

{ if (max–>data<p–>data) max=p;

p=p–>link;

}

m=temp_ptr–>data;

temp_ptr–>data=max–>data;

max–>data=m;

temp_ptr=temp_ptr–>link;

}

}

Удаление подряд идущих элементов списка.

void udalen(struct Node *head)

{ struct Node *temp_ptr=head, *s;

while (temp_ptr–>link!=NULL)

if (temp_ptr–>data==temp_ptr–>link–>data)

{ s=temp_ptr–>link;

temp_ptr–>link=temp_ptr–>link–>link;

delete s;

}

else temp_ptr=temp_ptr–>link;

}

Пример использования односвязных списков при программировании.

Сформировать файл из различных слов исходного файла.

struct list { char *word;

struct list *next;

};

void main( )

{ char *stroka=new char[120];

char *word=new char[80];

char s[ ]=” .,”;

struct list *p, *e, *pl;

FILE *inp, *out;

inp=fopen(“test.txt”,”rt”);

out=fopen(“out.txt”,”wt”);

while (fgets(stroka,120,inp)!=NULL)

{ stroka[strlen(stroka)–1]=’\0’;

word=strtok(stroka,s);

while (word!=NULL)

{ int fl=0;

l=p;

while(l=NULL)

if (strcmp(word,l–>)==0) { fl=l;

break;

}

else (fl==0) { l=new struct list;

l–>word=new char [strlen(word)+1];

strcpy(l–>word, word);

if (p==NULL) p=1;

else pl–>next=l;

pl=l;

l–>next=NULL;

}

word=strtok(NULL,s);

}

while (p!=NULL)

{ fprintf(out,”%s”,p–>word);

p=p–>next;

}

fclose(inp);

fclose(out);

}

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

Для выполнения лабораторной работы необходимо составить программу согласно своему варианту задания.

Требования к отчету.

Отчет должен содержать:

1) конспект лабораторной работы;

2) программу своего варианта задания.

Контрольные вопросы:

1) Что представляет собой динамическая память?

2) Для чего используется динамическая память?

3) Чем отличаются статические переменные от динамических?

4) Для чего служат указатели?

5) Как можно занять и освободить динамическую память?

6) Как организована структура стека, очереди?

7) Для чего используется списковая организация данных?

Таблица вариантов.

Считать, что длина списка (количество элементов) задана.

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

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

3,18 Описать функцию, которая заменяет в списке S все вхождения элемента Elem1 и Elem2.

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

5,20 Описать функцию, которая формирует список М1 – копию списка М.

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

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

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

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

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

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

12,27 Описать функцию, которая оставляет в списке только первые вхождения одинаковых элементов.

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

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

15,30 Описать функцию, которая удваивает каждое вхождение элемента One в список Double_elem.

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