Читайте также:
|
|
//------------------------------------------------------------------------------
void main ()
{
for (int i=1; i<=20; i++)
dop (s1, i);
cout << cth (s1);
cout << ud(s1);
cout << cth (s1);
cht1(s1); // cht2(s1); }
Список
Список – это соединение элементов в порядке убывания или возрастания ключевого признака –одного из элементов структур.
Рассмотрим следующие функции:
1) добавление элемента в список;
2) удаление элемента с заданным значением поискового признака;
3) поиск и вывод заданного элемента;
4) чтение и вывод всех элементов;
5) уничтожение списка путем освобождения ОП
Информация связанного списка – не данные типа int, а некая сложная структура пусть - библиотечная карта книги.
вершина хвост
списка списка
|
|
|
|
… 0
|
|
|
новый новый новый
элемент
ФУНКЦИИ СПИСКА
#include <string.h>
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
int count; // внешняя переменная для нумерации структур в списке
// определение структурного типа:
struct spisoc{
char*name; // название книги
char*author; // имя автора
int year; // год издания
spisoc* next; // указатель на следующую структуру в списке
};
// определение массива структур для дополнения с инициализацией
spisoc stm[]=
{ { "Turbo Pascal-7", "Фаронов В.В.", 1999 },
{ "Turbo C++", "Винер Р.С.", 1991 },
{ "C-C++", "Березин Б.И. ", 1998 } };
spisoc *s; // определение внешнего указателя на вершину списка, он
// по умолчанию инициирован нулем (NULL)
// Функция вывода на экран данных структуры - параметра
void print(spisoc st)
{
//static int count =0;
cout<<"\n"<<++count<<". "<<st.name<<", " <<st.author<<", " <<st.year;
}
// Функция вывода без нумерации
void print1(spisoc st)
{ cout<<st.name<<", " <<st.author<<", " <<st.year;
}
// Функция дополнения структурой, передаваемой как параметр
void dop (spisoc*&s, spisoc*st)
{
spisoc*list = s, // текущий указатель инициируется указателем на
//вершину
*pr=0, // вспомогательный указатель инициируется 0
*stnew=new(spisoc); // выделяется память на новую структуру
// типа spisoc
*stnew=*st; // копируются данные в новую структуру
// Организуем цикл продвижения по списку пока не достигнем или // нулевого указателя или пока не найдем такую структуру в списке, // в которой поле названия должно по алфавиту стоять после поля // названия вводимой структуры
while(list && (strcmp(list->name,st->name)<=0))
{ pr=list; list=list->next;}; // pr присваиваем значение указателя на
// текущую структуры, а текущему
//указателю list присваиваем значение
//указателя на следующую структуру list->next
stnew->next=list; //производим подключение справа: новую
// запись помещаем перед list
Дата добавления: 2015-07-26; просмотров: 119 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Очередь | | | организуем подключение слева |