#include #include #define LIMIT 20 #define NEW(PP) ((PP) = (PTRLIST)malloc(sizeof(STARTLIST))) #define TEST(PP) if (NEW(PP) == NULL) { printf("napaka pri rezerviranju spomina\n"); return; } typedef char * STRING; typedef struct tlist { int key; struct tlist *next; struct tlist *prev; }*PTRLIST, STARTLIST; char A[10]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'l', 'm'}; PTRLIST current, first, prev, sublist; char given; void showlist(ptr) PTRLIST ptr; { PTRLIST current; for (current=ptr; current!= NULL; current=current->next) printf("\n %c \n", current->key); } PTRLIST makesublist(l) STRING l; { /*kreiranje podseznama*/ STRING tmp_l; PTRLIST ptr, current, tmp; int i, len; TEST(ptr) current =ptr; tmp_l=l; current->key = *tmp_l; current->prev=NULL; tmp_l++; for (i=2; i<=strlen(l); i++, tmp_l++) { tmp=current; TEST(current->next) current = current->next; current->key = *tmp_l; current->prev=tmp; } current->next=NULL; return(ptr); } PTRLIST insertlist(list, subl, given) PTRLIST list, subl; char given; { PTRLIST aux, tmp_prev, tmp, curr; for (aux=curr=list; (curr!=NULL)&&(curr->key!=given); curr=curr->next); if (curr->key==given) { printf("nas elemet %c nastopa v seznamu \n", curr->key); tmp=curr->next; printf(" njemu sledi %c \n", tmp->key); curr->next=subl; tmp_prev=curr; curr=curr->next; curr->prev=tmp_prev; while ((curr->next)!=NULL) { tmp_prev=curr; curr=curr->next; } curr->next=tmp; curr->prev=tmp_prev; while ((curr->next)!=NULL) curr=curr->next; } else printf("nas elemet %c ne nastopa v seznamu \n", given); return(aux); } main() { int i, n; PTRLIST tmp, aux; STRING el_sublist; char *malloc(); printf("Koliko naj bo dolg seznam: "); scanf("%d", &n); if (n<1) { printf("Stevilo mora biti pozitivno\n"); return; } /*kreiranje seznama*/ TEST(first) current = first; current->key = A[1+(int)(10.0*rand()/(RAND_MAX+1.0))]; current->prev=NULL; printf("\n Prvi element ima vrednost %c", current->key); for (i=2; i<=n; i++) { tmp=current; TEST(current->next) current = first; current->key = A[1+(int)(10.0*rand()/(RAND_MAX+1.0))]; current->prev=NULL; printf("\n Prvi element ima vrednost %c", current->key); for (i=2; i<=n; i++) { tmp=current; TEST(current->next) current = current->next; current->key = A[(int) (10.0*rand()/(RAND_MAX+1.0))]; current->prev=tmp; } current->next=NULL; printf("\n Zgradil sem seznam!"); /* prikazovanje seznama */ showlist(first); printf("\n\nGRADNJA PODSEZNAMA\n"); printf("Iz katerih crk naj bo le ta sestavljen: "); el_sublist=malloc(LIMIT); scanf("%s", el_sublist); sublist = makesublist(el_sublist); printf("\n\n\n Podseznam, ki smo ga zgradili je:"); showlist(sublist); printf("\n Za katerim elementom bi radi urinili podseznam: "); scanf("%1s", &given); printf("\nTorej za elementom %c\n\n", given); current=insertlist(first, sublist, given); showlist(current); } }