Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details. (26)


Двунаправленный зацикленный список

Поиск:
Код

//////////////////////////////////////////////////////////////////////////////
//
//  Dynamic structures (bidirectional cycled list)
//  (c) Johna Smith, 1996
//
//  Method description:
// .................
// -> * -> * -> * ->
// <- * <- * <- * <-
// .  A    B    C  .
// .................
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <alloc.h>

struct item
{
  int element;
  item *prev;
  item *next;
};

item *list; // base element of the list

// this function removes element pointed by i from list

void Remove(item* i)
{
  i->next->prev=i->prev;
  i->prev->next=i->next;
  free(i);
}

// this function inserts element after
// element pointed by i
void Insert(item *i, int element)
{
  item *tmp;

  // creating new item
  tmp=(item*)malloc(sizeof(item));
  tmp->element=element;
  tmp->next=i->next;
  tmp->prev=i->next->prev;
  // correcting nearest elements pointers
  i->next->prev=tmp;
  i->next=tmp;
}

// this function searches element in the list
item* Search(int element)
{
  item *p,*q,*result=NULL;
  char found=0;

  p=list;
  q=list->next;
  
  while (p!=q && found==0)
  {
    if (q->element==element)
    {
      found=1;
      result=q;
    }
    q=q->next;
  }

  return result;
}

// this function prints the list
void printlist(void)
{
  item *p;

  p=list->next;
  while (p!=list)
  {
    printf("%d ",p->element);
    p=p->next;
  }
}

void main(void)
{
  // creating first element of the list
  list=(item*)malloc(sizeof(item));
  list->element=0;
  list->next=list;
  list->prev=list;

  printf("Adding elements 1,2,4 & 5n");
  Insert(list,5);
  Insert(list,4);
  Insert(list,2);
  Insert(list,1);
  printlist();
  printf("nSearching element 2n");
  item *tmp=Search(2);
  printf("Inserting element 3 after itn");
  Insert(tmp,3);
  printlist();
  printf("nDeleting element 1n");
  Remove(list->next);
  printlist();

  // destroying list
  while (list->next!=list) Remove(list->next);
  free(list);
}
Сайт: forum.vingrad.ru






Просмотров: 2403

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную