Wed. Apr 24th, 2024

Lists – Example with students

List with students:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <ctype.h>
#include <conio.h>

typedef struct elev{
	 char* nume;
	 char* prenume;
	 int nota;
	 struct elev*next;
	}ELEV;

ELEV* cap,*coada;

void citire(int i,ELEV* p){
 p->nume=(char*)malloc(sizeof(char)*20);
 printf("Nume %d: ",i);scanf("%s",p->nume);
 p->prenume=(char*)malloc(sizeof(char)*20);
 printf("Prenume %d: ",i);scanf("%s",p->prenume);
 printf("Nota %d: ",i);scanf("%d",&p->nota);
 p->next = NULL;
}

void adaugInceput(ELEV* p){
 p->next=cap;
 cap=p;
 if (!coada)
   coada=cap;
}

void adaugCoada(ELEV* p){
  if (cap==NULL)
   cap=p;
  else
   coada->next=p;
  coada = p;
}

void creare(void){
 ELEV *p;
 int i=0;
 char ch;

 cap=NULL;coada=NULL;
 while (1){
  p=(ELEV*)malloc(sizeof(ELEV));
  citire(i,p);
  //adaugInceput(p);
  adaugCoada(p);
  printf("Mai adaugati? (D/N):");ch=getche();
  printf("\n");
  i++;
  if (toupper(ch)=='N')
    break;
 }
}

void afisare(ELEV* cap){
  ELEV *p = cap;

  while (p != NULL){
    printf("%s %s %d \n",p->nume,p->prenume,p->nota);
    p = p->next;
  }
}

void inserare(ELEV* p){
 ELEV *q,*prev;

 if (p->nota<cap->nota) adaugInceput(p);
 else{
   prev=NULL;q=cap;
   while (q!=NULL && q->nota<=p->nota){
    prev=q;q=q->next;
   }
   if (!q) adaugCoada(p);
   else{
    prev->next=p;
    p->next=q;
   }
 }
}

void pune(void){
 ELEV *p;

 p=(ELEV*)malloc(sizeof(ELEV));
 citire(0,p);
 inserare(p);
}

void sterge(void){
  char nume[20];
  ELEV *p,*prev;

  printf("Nume: ");scanf("%s",nume);
  p=cap;prev=NULL;
  while (p != NULL && strcmp(nume,p->nume) != 0){
    prev=p;
    p=p->next;
  }
  if (!p) printf("Nu l-am gasit!\n");
  else{
    if (p==cap){
      cap=cap->next;
      if (!cap) coada=NULL;
    }
    else
      if (p==coada){
	coada=prev;
	coada->next=NULL;
      }
      else
	prev->next=p->next;
    free(p->nume);
    free(p->prenume);
    free(p);
  }
}

void main(void){
 creare();
 afisare(cap);
 sterge();
 afisare(cap);
}

 

24,122 total views, 1 views today