Лабы / Разработки С++ / Динам_структ
.docvoid 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. |
