КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Связанные структуры
Структуры, содержащие указатели, позволяют формировать линейные и нелинейные связанные структуры: ü линейные – стеки, очереди и списки; ü нелинейные – деревья и сети. Все линейные структуры имеют много общего: 1) все элементы их представляют собою последовательность элементов, связанных между собой в цепь с помощью указателей; 2) оперативная память для структур выделяется и освобождается с помощью функций Free, Malloc; 3) максимальное количество элементов структур ограничено только объемом доступной оперативной памяти; 4) последовательность элементов имеет начало цепи и конец (вершину). Различие названий структур связано с разными способами включения и исключения элементов из связанных структур. Стек – это организация накопления и извлечения данных, в которой элемент, поступивший в стек последним, извлекается первым. LIFO – last in first out (последним вошел, первым вышел). Этот способ данных используется при обработке последовательности активизированных функций и вложенных циклов. Например, цикл, начавший выполняться последним, завершит свою работу первым. Базовые операции над стеком: поместить в стек новый элемент, считать данные из вершины стека, удалить из стека данные (последние). #include <stdio.h> #include <alloc.h> #include <conio.h> #define Stack struct stack Stack { int info; Stack *uk;}; Stack *s; void main(void) { Stack *n; int err,i,k; clrscr(); printf("\n заполнение стека\n"); for(i=0;i<4;i++) { scanf("%d",&k); n=(Stack*)malloc(sizeof(Stack)); n->info=k; n->uk=s; s=n; } printf("\n чтение и удаление из стека\n"); for(i=0;i<6;i++) { if(s) {printf("%5d",s->info); Stack *old=s; s=s->uk; free(old);} else printf("\n end"); } getch(); } При включении нового элемента в стек положение указателя на последний элемент стека сдвигается
0 s= n При размещении нового элемента структуры в стеке: 1) запрашивается память для ее размещения; 2) в ней размещается новая информация; 3) указатель новой структуры получает адрес предыдущего элемента стека; 4) адрес вершины стека получает адрес нового элемента. Для удаления элемента из стека производятся операции: 1) указатель вершины стека получает адрес предыдущего элемента стека; 2) освобождается оперативная память удаляемого элемента стека.
Очередь. - это организация накопления и извлечения данных, в которой элемент, поступивший первым, извлекается тоже первым. FIFO – first in – first out. Базовые операции над очередью – поместить элемент в очередь, считать элемент из очереди, удалить элемент из очереди. #include <stdio.h> #include <alloc.h> #include <conio.h> struct Och { int info; Och *uk;}; Och *s; void main(void) { Och *n,*cur,*pr; int err,i,k; clrscr(); printf("\n добавление\n"); for(i=0;i<4;i++) {cur=s; // cur – адресует первый элемент очереди pr=0; // pr – указатель на предыдущий элемент очереди scanf("%d",&k); n=(Och*)malloc(sizeof(Och)); n->info=k; n->uk=0; // обнуляем, т.к. это последний элемент очереди while(cur) // поиск конца очереди для размещения нового элемента { pr=cur; cur=cur->uk;} // движение вдоль очереди if(pr) //pr!=0 pr->uk=n; / /подключение нового элемента else s=n; // новый элемент - первый в очереди } printf("\n чтение и удаление\n"); Och *old; for(i=0;i<4;i++) { if(s) {printf("%5d",s->info); old=s; s=s->uk; free(old); } else printf("\n end"); } getch(); } Схема перемещения указателей вдоль очереди
Дата добавления: 2014-01-06; Просмотров: 536; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |