All pastes #274110 Raw Edit

GrayShade

public cpp v1 · immutable
·published 2006-12-10 13:01 UTC
rendered paste body
#include <conio.h>#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct int_n{	int l;	struct int_n *a[27];	char  key[20];}intern_nod;void regasire(intern_nod *rad,char new_key[20]){intern_nod *next,*index,*data;int i;next=rad;if(next==NULL){	printf("\n inregistrare lipsa");	exit(1);}else index=next;i=0;while((index->l==1)&&(index->a[new_key[i]-'a']!=NULL)){	next=index->a[new_key[i]-'a'];	index=next;	i++;}if(next==NULL)printf("\n inregistrare lipsa");else{	data=next;	if(!strcmp(data->key,new_key))		printf("\n inregistrare=%s\n",data->key);	else 		if(!strcmp(data->a[26]->key,new_key))			printf("\n inregistrare=%s\n",data->a[26]->key);			else			printf("\n inregistrare lipsa");}}intern_nod *NewFrunza(char n_key[20]){intern_nod *p;int i;p=new intern_nod;for(i=0;i<=27;i++) p->a[i]=NULL;p->l=0;strcpy(p->key,n_key);return p;}intern_nod *NewIntern(){intern_nod *p;int i;p=new intern_nod;for(i=0;i<=27;i++)p->a[i]=NULL;p->l=1;return p;}intern_nod *insert(intern_nod *rad,char new_key[20]){intern_nod *next,*index,*parent;intern_nod *new_leaf,*data;intern_nod *new_index;intern_nod *salv1,*salv2;intern_nod *at;int i,j;next=rad;if(next==NULL){	rad=NewIntern();	new_leaf=NewFrunza(new_key);	rad->a[new_key[0]-'a']=new_leaf;	return rad;}else index=next;i=0;while((index->l==1)&&(index->a[new_key[i]-'a']!=NULL)){	parent=next;	next=index->a[new_key[i]-'a'];	index=next;	i++;}if((index->a[new_key[i]-'a']==NULL)&&(index->l==1)){	new_index=NewFrunza(new_key);	index->a[new_key[i]-'a']=new_index;	return rad;}else  data=next;if(!strcmp(data->key,new_key))  printf("\n inregistrarea exista!");else{	salv1=parent->a[new_key[i-1]-'a'];	salv2=NewFrunza(new_key);	j=strlen(new_key);	if(strlen(data->key)<j)		j=strlen(data->key);}while((i<=j)&&(data->key[i-1]==new_key[i-1])){	at=NewIntern();	parent->a[new_key[i-1]-'a']=at;	parent->l=1;	parent=at;	i++;}i--;if((i!=j)||((i==j)&&(strlen(new_key)==strlen(data->key)))){	parent->a[data->key[i]-'a']=salv1;	parent->a[new_key[i]-'a']=salv2;}elseif(strlen(data->key)<=j){	parent->a[26]=salv1;	parent->a[new_key[j]-'a']=salv2;}else{	parent->a[26]=salv2;	parent->a[new_key[j]-'a']=salv1;}return rad;}void afisare_arb(intern_nod *rad,int nivel){	int i;	if (rad!=0)		if(rad->l==0)		{ for(int j=0;j<nivel;j++)		  printf(" ");		printf("%s",rad->key);		}		else					for (i=26;i>=0;i--)				afisare_arb(rad->a[i],nivel+1);}		void main(){intern_nod *rad;char ch[20],c;rad=NULL;do{	printf("\n introduceti cuv de inserat:");	gets(ch);    rad=insert(rad,ch);	regasire(rad,ch);	printf("\n continuati?");	c=getch();}while(c!='n');do{	printf("\n 1Inserare, 2Cautare, 3Afisare sau 4 Exit?");	c=getch();		switch(c)	{	case'1':printf("\n dati cuv de inserat:");		 gets(ch);		 insert(rad,ch);		 break;	case '2':printf("\n introd cuv de cautat:");		     gets(ch);			 regasire(rad,ch);			 break;	case'3':printf("\n");		afisare_arb(rad,0);break;    case '4':exit(1);	default:printf("\n eroare!!!");	}}while(c!='4');}