Advertisement
madalinaradu

o sortare si o lista

May 9th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.99 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdbool.h>
  4. #include<iostream>
  5. using namespace std;
  6. #define MAX 6
  7. struct curs
  8. {
  9.     int start,fin;
  10. };
  11. curs c[]={3,5,1,4,3,4,6,7,8,10,7,10};
  12. int n=MAX;
  13. void sortare()
  14. {
  15.     for(int i=0; i<n-1; i++)
  16.     {
  17.         for(int j=i+1; j<n; j++)
  18.         {
  19.             if(c[i].start>c[j].start){
  20.             curs temp=c[i];
  21.             c[i]=c[j];
  22.             c[j]=temp;
  23.             }
  24.  
  25.         if(c[i].start==c[j].start && c[i].fin>c[j].fin)
  26.         {
  27.             curs temp=c[i];
  28.             c[i]=c[j];
  29.             c[j]=temp;
  30.         }
  31.  
  32.     }
  33.     }
  34.  
  35.     cout<<c[0].start<<"-"<<c[0].fin<<endl;
  36.         int s=c[0].fin;
  37.     for(int i=1; i<n; i++)
  38.     {
  39.         if(s<=c[i].start)
  40.         {
  41.             cout<<c[i].start<<"-"<<c[i].fin<<endl;
  42.                 s=c[i].fin;
  43.         }
  44.     }
  45. }
  46. int main()
  47. {
  48.     sortare();
  49.     getch();
  50.     return 0;
  51. }
  52.  
  53. #include<stdio.h>
  54. #include<stdlib.h>
  55. #include<conio.h>
  56. #include<math.h>
  57.  
  58. typedef struct nod {
  59.     int info;
  60.     struct nod *urm;
  61. } Nod;
  62.  
  63. Nod* prim;
  64. Nod* ultim;
  65.  
  66.  
  67. Nod* alocare() {
  68.     return (Nod*) malloc(sizeof( Nod));
  69. }
  70.  
  71. void creareListaVida() {
  72.     prim = ultim = NULL;
  73. }
  74.  
  75. // Adaugare la sfarsit.
  76. void adaugareNodSfarsit(int x) {
  77.     Nod *p = alocare();
  78.  
  79.     p->info = x; //stocam
  80.     p->urm = NULL;
  81.  
  82.     if(prim == NULL) { // Lista e vida
  83.         prim = ultim = p;
  84.     } else {
  85.         ultim -> urm = p; // stabilim ca dupa ultimul element al listei se va afla p (nodul adaugat).
  86.         ultim = p; // acum ultim va indica catre noul nod alocat.
  87.     }
  88. }
  89.  
  90. void afisareLista() {
  91.     Nod* p; //p va parcurge (indica) pe rand elementele listei pornind de la primu.
  92.     int i=0;
  93.     p=prim; // pornesc de la prim
  94.     while(p != NULL) {  //atat timp cat nu am ajuns dupa ultim (dupa ultim e NULL).
  95.         printf("valoarea nodului %d este %d\n",i + 1,p->info);
  96.         p=p->urm;
  97.         i++;
  98.     }
  99. }
  100.  
  101.  
  102. //Adaugare un fata
  103. void adaugareNodFata(int x) {
  104.     Nod *p=alocare();
  105.     p->info=x;
  106.     if(prim==NULL) {
  107.         prim=ultim=p;
  108.         p->urm=NULL;
  109.     } else {
  110.         p->urm=prim;
  111.         prim=p;
  112.     }
  113. }
  114.  
  115. //Gasire element de pe pozitia i cu returneare adresei. Daca pozitia e invalida returam NULL.
  116. Nod* gasireElementIndex( int i) {
  117.     Nod *p;
  118.     int k;
  119.     p=prim;
  120.     if (i<=0) {
  121.         return NULL;
  122.     }
  123.     k=1;
  124.     while(p!=NULL && k<i) {
  125.         p=p->urm;//avansam la urmatorul nod
  126.         k++;
  127.     }
  128.     return p;//se returneaza adresa elementului i
  129.  
  130. }
  131.  
  132. void adaugare_Dupa_Element_i(int i, int x) {
  133.  
  134.     Nod *p,*q;
  135.     //Cautam elementul dupa care vrem sa adauga
  136.     p=gasireElementIndex(i);
  137.     //testam dacaa am gasit elementul
  138.     if(p!=NULL) {
  139.         q=alocare();
  140.         q->info=x;
  141.         q->urm=p->urm;
  142.         p->urm=q;
  143.         if(q->urm==NULL) {
  144.             ultim=q;
  145.         }
  146.     } else {
  147.         printf("Eroare: Adaugarea nu se poate realiza pentru ca pozitia e incorecta");
  148.     }
  149.  
  150. }
  151. //cauta elementul x, returneaza adresa nodului in care a gasit valoarea, altfel, returneaza NULL
  152. Nod* cautareElement(int x) { //cautare dupa valoare
  153.     Nod*p;
  154.     p=prim;
  155.     while(p!=NULL && p->info!=x) {
  156.         p=p->urm;
  157.     }
  158.     return p;
  159. }
  160. //stergere nod dupa valoare
  161. void stergereElement(int x) {
  162.     Nod *p,*q;
  163.     q=NULL;
  164.     p=prim;
  165.     while(p!=NULL && p->info!=x) {
  166.         q=p;
  167.         p=p->urm;//trece la urmatorul element
  168.  
  169.     }
  170.     if(p) { //!= NULL, a gasit elementul
  171.         if(q!=NULL) {
  172.             // cazul in care nu sterg primul element.
  173.             q->urm=p->urm;//q trece si el la elem urmator
  174.             free(p);
  175.             if(q->urm==NULL) { //p a fost ultimul element, deci q devine ultimul element
  176.                 ultim=q;
  177.             }
  178.         } else {
  179.             //stergem elementul de pe prima pozitie
  180.             prim=p->urm;
  181.             free(p);
  182.             //ramanem cu lista vida?
  183.             if(prim==NULL) {
  184.                 ultim=NULL;
  185.  
  186.             }
  187.         }
  188.     }
  189. }
  190.  
  191.  
  192.  
  193. int main() {
  194.     int n,i,x,j;
  195.     Nod*p;
  196.     creareListaVida();
  197.     printf("nr Noduri=");
  198.     scanf("%d",&n);
  199.     for(i=0; i<n; i++) {
  200.         //printf("Info: ");
  201.         //scanf("%d", &x);
  202.         adaugareNodSfarsit(i);
  203.     }
  204.     afisareLista();
  205.     printf("Info: ");
  206.     scanf("%d", &x);
  207.     adaugareNodFata(x);
  208.     printf("Info: ");
  209.     scanf("%d", &x);
  210.     adaugareNodSfarsit(x);
  211.  
  212.     afisareLista();
  213.  
  214.     printf("dati nodul dupa care se insereaza noul nod:\n");
  215.     printf("j= ");
  216.     scanf("%d",&j);
  217.     printf("adaugam nod dupa elementul %d. \n",j);
  218.     gasireElementIndex(j);
  219.     printf("Info: ");
  220.     scanf("%d", &x);
  221.     adaugare_Dupa_Element_i(j,x);
  222.     afisareLista();
  223.     printf("dati valoarea cautata");
  224.     scanf("%d",&x);
  225.     p=cautareElement(x);
  226.     if(p!=NULL) {
  227.         printf("valoarea a fost gasita\n");
  228.         getchar();
  229.  
  230.         stergereElement(x);
  231.     } else {
  232.         printf("valoarea nu a fost gasita\n");
  233.     }
  234.  
  235.     afisareLista();
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement