×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: Jul 9, 2016 2:11 PM
Views: 2043
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4.  
  5. typedef struct dane{
  6.     char imie[15];
  7.     char nazwisko[20];
  8.     int wiek;
  9.     int staz;}dane;
  10. typedef struct wezel{
  11.     struct dane dane;
  12.     struct wezel* next;
  13.     struct wezel* prev;
  14.     }wezel;
  15. typedef struct lista{
  16.     struct wezel* glowa;
  17.     struct wezel* ogon;
  18.     }lista;
  19.  
  20. void setNull(lista* l);
  21. wezel* createEl(dane d);
  22. void push(lista *l, wezel* w);
  23. void wysw(lista* l);
  24. dane dodaj();
  25.  
  26. void main(int argc,char *argv[])
  27. {
  28.     lista l;
  29.     wezel* el1;
  30.         int q;
  31.     dane baza;
  32.  
  33.     setNull(&l);
  34.  
  35.         while(1){
  36.                 fflush(stdin);
  37.                 baza=dodaj();
  38.                 el1=createEl(baza);
  39.                 push(&l,el1);
  40.                 system("cls");
  41.                 wysw(&l);
  42.         }
  43.        
  44. }
  45. dane dodaj(){
  46.         dane baza;
  47.         printf("Podaj imie(ctrl+z) konczy program: ");
  48.         if(gets(baza.imie)==NULL)exit(1);
  49.        
  50.         printf("Podaj nazwisko: ");
  51.         gets(baza.nazwisko);
  52.        
  53.         printf("Podaj wiek: ");fflush(stdin);
  54.         scanf("%d",&baza.wiek);
  55.        
  56.         printf("Podaj staz: ");fflush(stdin);
  57.         scanf("%d",&baza.staz);
  58.         return baza;
  59. }
  60. void setNull(lista* l){
  61.     l->glowa=NULL;
  62.     l->ogon=NULL;
  63.     }
  64. wezel* createEl(dane d){
  65.     wezel* el=(wezel*)malloc(sizeof(wezel));
  66.     el->dane=d;
  67.     el->next=NULL;
  68.     el->prev=NULL;
  69.     return el;
  70.     }
  71. void push(lista *l, wezel* w)
  72. {
  73.     char znak=w->dane.nazwisko[0];
  74.     wezel* wsk=l->glowa;
  75.         if(l->glowa==NULL && l->ogon==NULL){
  76.             w->next=NULL;
  77.             w->prev=NULL;
  78.             l->glowa=w;
  79.             l->ogon=w;
  80.             }
  81.  
  82.         else{
  83.             if(znak<l->glowa->dane.nazwisko[0]){ // zamiana z glowa
  84.                 w->next=l->glowa;
  85.                 w->prev=NULL;
  86.                 l->glowa->prev=w;
  87.                 l->glowa=w;
  88.             }
  89.                         else if(znak> l->ogon->dane.nazwisko[0]){ //zamiana z ogonem
  90.                                     w->next=NULL;
  91.                     w->prev=l->ogon;
  92.                     l->ogon->next=w;
  93.                     l->ogon=w;
  94.                                
  95.                         }
  96.             else{
  97.                 while(znak > wsk->next->dane.nazwisko[0] && wsk->next!=NULL) wsk=wsk->next;
  98.                  w->next=wsk->next;
  99.                  w->prev=wsk;
  100.                                  wsk->next->prev=w;
  101.                  wsk->next=w;
  102.             }
  103.             }
  104. }
  105. void wysw(lista* l){
  106.     wezel*w=l->glowa;
  107.     int i;
  108.     while(w!=NULL){
  109.         printf("%s \t %s \t %d \t %d\n",w->dane.imie,w->dane.nazwisko,w->dane.wiek,w->dane.staz);
  110.         w=w->next;
  111.     }
  112. }
  113.  
  114.