Advertisement
Guest User

Untitled

a guest
May 5th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4.  
  5. typedef struct data{
  6.    int value;
  7.    struct data *next, *prev;
  8. }person;
  9.  
  10. person *head = NULL;
  11. person *tail = NULL;
  12. person *current;
  13.  
  14. int count=0;
  15.  
  16. void addElement();//добавить информацию о элементе
  17. void addFront();//добавить элемент в начало
  18. void addNow();
  19. void addBack();//добавить элемент в конец
  20. void deleteFront();//удалить первый элемент
  21. void deleteNow();
  22. void deleteBack();//удалить последний элемент
  23. void deleteList();//удалить весь список
  24. void changeInfo();
  25. void output();//вывести данные
  26. void outOverFive();
  27. void outOverGet();
  28. void outLivingOnTheStreet();
  29. void sortingByAge();
  30. void saveInFile();
  31. void outFromFile();
  32.  
  33. int main()
  34. {
  35.     int answer, answer2, answer3;
  36.     setlocale(LC_ALL, "");
  37.     while(answer!=0){
  38.       printf("\n--------------------------------------------------------------------------------");
  39.       printf("\nЧто нужно делать?");
  40.       printf("\n1-Добавить элемент\n2-Вывести список\n3-Удаление элемента\n4-Изменить данные");
  41.       printf("\n5-Вывести элементы больше 5\n6-Вывести элементы больше указанного\n7-Вывести живущих на данной улице");
  42.       printf("\n8-Сортировать по возрасту\n9-Записать в файл\n0-Закрыть программу");
  43.       printf("\nВаш выбор: ");
  44.       scanf("%d", &answer);
  45.       switch(answer){
  46.          case 1:
  47.             printf("\nДобавить в: \n1-Начало \n2-В указанное место\n3-В конец\nВаш выбор: ");
  48.             scanf("%d", &answer2);
  49.             switch(answer2){
  50.               case 1:
  51.                 addFront();
  52.                 break;
  53.               case 2:
  54.                 addNow();
  55.                 break;
  56.               case 3:
  57.                 addBack();
  58.                 break;
  59.              }
  60.               break;
  61.          case 2:
  62.             output();
  63.             break;
  64.          case 3:
  65.             printf("\nУдалить: \n1-Первый элемент \n2-Указанный элемент\n3-Последний элемент\n4-Весь список\nВаш выбор: ");
  66.             scanf("%d", &answer3);
  67.             switch(answer3){
  68.               case 1:
  69.                 deleteFront();
  70.                 break;
  71.               case 2:
  72.                 deleteNow();
  73.                 break;
  74.               case 3:
  75.                 deleteBack();
  76.                 break;
  77.               case 4:
  78.                 deleteList();
  79.                 break;
  80.         }
  81.          case 4:
  82.  
  83.             break;
  84.          case 5:
  85.  
  86.             break;
  87.          case 6:
  88.  
  89.             break;
  90.  
  91.          case 7:
  92.  
  93.             break;
  94.          case 8:
  95.             sortingByAge();
  96.             break;
  97.          case 9:
  98.  
  99.             break;
  100.          case 0:
  101.             return 0;
  102.  
  103.     }
  104. }return 0;
  105. }
  106.  
  107. void addElement(){
  108.     current = malloc(sizeof(person));
  109.     printf("\nВведите значение value: ");
  110.     scanf("%d", &current -> value);
  111. }
  112.  
  113. void addFront(){//Добавит в начало
  114.     addElement();
  115.     if(head!=NULL){ //Если в списке были элементы
  116.       current -> next = head;
  117.       head -> prev = current;
  118.       head = current;
  119.     }
  120.     else { //Если список пуст
  121.       tail = current;
  122.       head = current;
  123.     }
  124.     count++;
  125. }
  126.  
  127. void addBack(){
  128.   addElement();
  129.   if(tail!=NULL){//Если в списке есть элементы
  130.     current->prev=tail;
  131.     tail->next=current;
  132.     tail=current;
  133.     current->next=NULL;
  134.   }
  135.   else{
  136.     tail=current;
  137.     head=current;
  138.   }
  139.   count++;
  140. }
  141.  
  142. void addNow(){
  143.   int index;
  144.   do {
  145.   printf("\nВведите индекс элемента, который хотите добавить: ");
  146.   scanf("%d", &index);
  147.   if(index<=NULL || index>count+1 && index != 1 && index != count){
  148.     printf("\nИндекс указан неверно. Попробуйте еще раз: ");
  149.     scanf("%d", &index);
  150.     }
  151.   }while(index<=NULL || index>count+1 && index != 1 && index != count);
  152.   if(index==1)
  153.     addFront();
  154.   else if(index==count)
  155.     addBack();
  156.   else{
  157.     person *ptr=head;
  158.     int i=0;
  159.     while(ptr!=NULL){
  160.        i++;
  161.        if(i+1==index){
  162.          addElement();
  163.          current->next=ptr->next;
  164.          ptr->next=current;
  165.        }
  166.        else
  167.          ptr=ptr->next;
  168.     }
  169.   }
  170.   count++;
  171. }
  172.  
  173. void deleteFront(){
  174.     if(head==NULL && tail==NULL)//Если список пустой
  175.         printf("\nСписок пуст. Удалять нечего.\n");
  176.     else if(head == tail) {//Если в списке есть один элемент
  177.         tail = NULL;
  178.         free(head);
  179.         head = NULL;
  180.     }
  181.     else{//Если в списке были элементы
  182.         current = head;
  183.         head = head->next;
  184.         head->prev = NULL;
  185.         free(current);
  186.     }
  187.     count--;
  188. }
  189.  
  190.  
  191. void deleteNow(){
  192.   int index;
  193.   printf("\nВведите индекс элемента, который хотите удалить: ");
  194.   scanf("%d", &index);
  195.   if(index<=NULL || index>count)
  196.     printf("\nТакого нет.");
  197.   else if(index==1)
  198.     deleteFront();
  199.   else if(index==count)
  200.     deleteBack();
  201.   else{
  202.     person *ptr=head;
  203.     int i=0;
  204.     while(ptr!=NULL){
  205.        i++;
  206.        if(i==index){
  207.          current=ptr->next;
  208.          current->prev=ptr->prev;
  209.          current=ptr->prev;
  210.          current->next=ptr->next;
  211.          free(ptr);
  212.        }
  213.        else
  214.          ptr=ptr->next;
  215.     }
  216.   }
  217. }
  218.  
  219. void deleteBack(){
  220.   if(head==NULL && tail==NULL)//Если список пустой
  221.      printf("\nСписок пуст. Удалять нечего.");
  222.   else if(head == tail) {//Если в списке есть один элемент
  223.         tail = NULL;
  224.         free(head);
  225.         head = NULL;
  226.     }
  227.   else{//Если в списке были элементы
  228.         current = tail;
  229.         tail = tail->prev;
  230.         tail->next = NULL;
  231.         free(current);
  232.     }
  233.   count--;
  234. }
  235.  
  236. void deleteList(){
  237.     while(head!=NULL){//пока не указываем на хвост
  238.         current = head; //создаем временный элемент
  239.         head = head->next;  //присваиваем ему указатель на следующий
  240.         free(current);  // и удаляем его
  241. }
  242. head = NULL;
  243. count = 0;
  244. }
  245.  
  246. void output(){
  247.   if(head==NULL)
  248.     printf("\nСписок пуст.");
  249.   else{
  250.     printf("\nСписок:\n");
  251.     current=head;
  252.     while(current!=NULL){
  253.       printf("%d ",current -> value);
  254.       current = current->next;
  255.    }
  256.   }
  257. }
  258.  
  259. void sortingByAge(){
  260.  
  261. }
  262.  
  263.  
  264. void outOverFive(){
  265.   if(head==NULL)
  266.     printf("\nСписок пуст.\n");
  267.   else{
  268.     printf("\nValue больше 5: ");
  269.     current=head;
  270.     while(current!=NULL){
  271.       if(current->value>5)
  272.          printf("%d  ",current -> value);
  273.       current = current->next;
  274.     }
  275.   }
  276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement