Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.c
- // cuvinte_grafuri
- //
- // Created by Groza Miruna on 12/3/16.
- // Copyright © 2016 Groza Miruna. All rights reserved.
- //
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int k=0,n;//nr de noduri inserate
- struct Nod {
- char *ch;
- struct Nod *urm;
- };
- struct graf {
- char *cheie;
- struct Nod *prim;
- }gr[100];
- void initializare()
- {
- int i;
- for (i = 0; i < 100; i++)
- {
- gr[i].cheie="\n";
- gr[i].prim = NULL;
- }
- k=0;
- }
- void afisare()
- {
- struct Nod *p;
- for(int i=0;i<k;i++)
- {
- printf("%s-> ",gr[i].cheie);
- for(p=gr[i].prim; p!=NULL; p=p->urm)
- printf("%s; ",p->ch);
- printf("\n");
- }
- }
- int exista_arc(char *x, char *y)
- {
- int ok=0,i;
- for(i=0; i<n && ok<2 ;i++)
- if(x[i]!=y[i])
- ok++;
- return ok;
- }
- int exista_nod(char *x)
- {
- int ok=1;
- for(int i=0;i<k && ok;i++)
- if(strcmp(x,gr[i].cheie)==0)
- ok=0;
- return ok;
- }
- void inserare_arc(char *x, char *y)
- {
- struct Nod *n,*m,*p = NULL,*q= NULL;
- int i;
- n = (struct Nod*)malloc(sizeof(struct Nod*));
- n->ch=(char*)malloc(strlen(x)+1);
- strcpy(n->ch,x);
- n->urm=NULL;
- m = (struct Nod*)malloc(sizeof(struct Nod*));
- m->ch=(char*)malloc(strlen(y)+1);
- strcpy(m->ch,y);
- m->urm=NULL;
- for(i=0;i<k;i++)
- {
- if(strcmp(gr[i].cheie,x)==0)
- {
- if(gr[i].prim == NULL)
- gr[i].prim=m;
- else
- {
- for(p=gr[i].prim; p->urm!=NULL ; p=p->urm);
- p->urm=m;
- }
- }
- else
- if(strcmp(gr[i].cheie,y)==0)
- {
- if(gr[i].prim==NULL)
- gr[i].prim=n;
- else
- {
- for(q= gr[i].prim; q->urm!= NULL; q=q->urm);
- q->urm=n;
- }
- }
- }
- }
- void inserare_nod (char *x)
- {
- gr[k].cheie=(char*)malloc(strlen(x)+1);
- strcpy(gr[k].cheie,x);
- gr[k].prim = NULL;
- k++;
- for(int i=0;i<k;i++)
- if(exista_arc(x ,gr[i].cheie)==1)
- inserare_arc(x,gr[i].cheie);
- }
- void sterge(char *x)
- {
- int i;
- struct Nod *p, *q;
- for (i = 0; i < k; i++) {
- if (gr[i].prim != NULL) {
- p = gr[i].prim;
- if (strcmp(gr[i].prim->ch,x)==0)
- {
- q = gr[i].prim;
- gr[i].prim = q->urm;
- free(p);
- }
- else {
- while (p->urm != NULL) {
- if (strcmp(p->urm->ch,x)==0)
- {
- q = p->urm;
- if (q->urm == NULL)
- {
- p->urm = NULL;
- free(q);
- }
- else
- {
- p->urm = q->urm;
- free(q);
- }
- }
- p = p->urm;
- }
- }
- }
- }
- }
- void suprima_nod(char* x)
- {
- int i, j;
- sterge(x);
- for (i = 0; i < k; i++)
- if (strcmp(gr[i].cheie,x)==0)
- break;
- for(j=i;j<k-1;j++)
- gr[j] = gr[j+1];
- gr[j].cheie = 0;
- gr[j].prim = NULL;
- }
- int main(int argc, const char * argv[])
- {
- int opt;
- char v[10];
- initializare();
- printf("\nDati lungimea cuvantului: ");
- scanf("%d",&n);
- do{
- printf("\n1.Introducere\n2.Suprimare\n3.Afisare\nDati opt: ");
- scanf("%d",&opt);
- switch (opt) {
- case 1:
- printf("Dati cuvantul de lungime %d: ",n);
- fflush(stdin);
- scanf("%s",v);
- if(strlen(v) == n && exista_nod(v))
- inserare_nod(v);
- else
- printf("Cuvantul introdus nu are lungimea de %d litere sau exista deja!",n);
- break;
- case 2:
- printf("Dati cuvantul care doriti sa il suprimati: ");
- scanf("%s",v);
- if(!exista_nod(v))
- {
- suprima_nod(v);
- k--;
- }
- else
- printf("Cuvantul cautat nu exista!\n");
- break;
- case 3:
- afisare();
- break;
- case 5:
- inserare_nod("CERNE");
- inserare_nod("CARNE");
- inserare_nod("CARTE");
- inserare_nod("CERTE");
- inserare_nod("CURTE");
- inserare_nod("CURBE");
- inserare_nod("CURSE");
- inserare_nod("BURSE");
- break;
- default:
- printf("Nu ati introdus o optiune valida!\n");
- break;
- }
- }while(opt!=0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement