?.  
  Метод Хоара нестійкий.) Динамічний список 
  Динамічний список - це послідовність структур, кожна з яких містить посилання, що зв'язує її з іншою структурою. Для організації списків використовуються структури, що складаються з двох смислових частин - інформаційної та додаткової. Інформаційна частина містить підлягає обробці інформацію, в додатковій знаходяться покажчики на подальшу або попередню структуру списку: 
   Structst {char data [20]; * next; };// Указательнаструктуруst 
   Тут при описі покажчика використовуємо ще не описаний об'єкт structst * next, який буде служити посиланням на сусідній елемент списку. Залежно від методу доступу до елементів лінійного списку розрізняють різновиду лінійних списків. Найбільш відомі списки, звані стеком і очередью.Стек можна представити як стопку книг на столі, де додавання або взяття нової книги можливо тільки зверху. Таким чином, операції додавання і видалення елемента, а також доступу до елементу виконуються тільки в кінці списку. Черга - це список, де елементи видаляються з початку списку, а додаються в кінець списку (як звичайна черга в магазині). 
  Приклад створення і перегляду стека. Нехай потрібно ввести деяку послідовність символів, що закінчується крапкою, і надрукувати її у зворотному порядку. 
   # include lt; stdio.h gt; 
  # include lt; stdlib.h gt; 
  # include lt; conio.h gt; 
  {charch; * next; 
 } stack; () 
  {stack * p, * q; 
  char a; 
  p=NULL; (CLS); 
 //заполненіестека 
  {a=getchar (); 
  q=(stack *) malloc (sizeof (stack)); 
  q- gt; next=p;=q; 
  q- gt; ch=a; 
 } while (a!=. ); 
 //друк стека c звільненням пам'яті 
  do 
  {p=q- gt; next; (q);=p; (% c , p- gt; ch); 
 } while (p- gt; next!=NULL); (); 0; 
 } 
   Приклад створення і перегляду одинзв'язного списку. Нехай потрібно помістити в список прізвища і вивести їх у порядку черговості. У даному прикладі використовуємо оператори new і delete. 
   # include lt; stdio.h gt; 
  # include lt; conio.h gt; 
  # include lt; stdlib.h gt; 
  {char data [20]; * next;} spis; * create (void);// функціясозданіяспіска (spis * head);// Функція перегляду спіска_spis (spis * head);// функціяосвобожденіяпамяті () 
  {system ( CLS ); * head;// Адресголовиспіска=create (); (head); _ spis (head); (); 
				
				
				
				
			 } * create (void) 
  {spis * p, * pred, * h; 
 //pred - покажчик на попередню структуру 
 //h- покажчик на перший структуру 
  h=pred=newspis;// виділення пам'яті для першої структури 
  printf ( fam: ); scanf (% s raquo ;, pred- gt; data); {p=new spis; ( n fam: ); scanf (% s raquo ;, p- gt; data); - gt; next=p;// посилання з попередньої на поточну 
  pred=p;// Збереження адреси поточної 
  printf ( закінчити? y/n ); 
 } while (getch ()= y ); gt; next=NULL; h; 
 } list (spis * head) 
  {spis * p; 
  p=head; 
  while (p!=NULL)//поки не кінець списку 
  {printf ( n fio:% s , p- gt; data);=p- gt; next;// Просування за списком 
 } 
 } _ spis (spis * head) 
  {spis * p, * q;=p=head; (p!=NULL) 
  {= q- gt; next; q;=p; 
 }=NULL; 
 } 
  3. Код програми 
   # include lt; locale.h gt; 
  # include lt; stdio.h gt; 
  # include lt; stdlib.h gt; 
  # include lt; string.h gt; 
  # include lt; conio.h gt; 
  # include lt; iostream gt ;; N; [1 000]; i=0; S 
  {S * next, * head; [20]; name [20]; group [8]; d [11]; KS1; KS2; 
 } spis; 
  voidAdd (spis ** p, intflag) {// процедура для додавання студента в список 
  spis * temp=newspis; (flag == 1) 
  cout lt; lt; Введіть нового студента: lt; lt; endl lt; lt...