#include #include #include /** estrutura que define o nó de uma lista **/ typedef struct node* nodePtr; typedef struct node{ int ra; int curso; char rg[20]; char nome[50]; nodePtr prox; } node; /* cria um novo nó a partir do valor de cada um dos seus campos */ nodePtr newNode(int ra, int curso, char* rg, char* nome, nodePtr prox){ nodePtr p = (nodePtr)malloc(sizeof(node)); p->ra = ra; p->curso = curso; strcpy(p->rg,rg); strcpy(p->nome,nome); p->prox = prox; return p; } /* insere nó antes do primeiro */ void insert(nodePtr* p, nodePtr q){ if(q != NULL){ q->prox = *p; *p = q; } } /* insere nó ao final da lista */ void insert2(nodePtr* p, nodePtr q){ nodePtr t = *p; q->prox = NULL; if(*p == NULL) *p = q; else { while(t->prox != NULL) t = t->prox; t->prox = q; } } /* auxiliar - remove primeiro elemento da lista */ nodePtr removeFirst(nodePtr* p){ nodePtr q; if((p==NULL) || (*p==NULL)) return NULL; q = *p; *p = q->prox; return q; } /** inverte a ordem dos elementos numa lista **/ nodePtr invert(nodePtr *p){ nodePtr q = NULL; while(*p != NULL) insert(&q,removeFirst(p)); return q; } /** testes **/ struct node turma1[] = { { 11, 99, "333", "Joao",NULL}, { 13, 99, "334", "José",NULL}, { 15, 99, "123", "Paulo",NULL}, { 19, 99, "432", "Rui", NULL}, { 20, 99, "323", "Joaquim",NULL}, { 21, 99, "324", "Pedro",NULL}, { 22, 99, "125", "Maria",NULL}, { 23, 99, "436", "Anita", NULL}, { 25, 99, "330", "Eduardo",NULL}, { 27, 99, "301", "Marcelo",NULL}, { 29, 99, "132", "Alice",NULL}, { 31, 99, "234", "Cesar", NULL} }; /** constrói uma lista a partir de um vetor de estruturas **/ nodePtr makeList(node t[], int n){ int i; nodePtr lista = NULL; for(i = 0; i < n; i++) insert2(&lista,&t[i]); return lista; } /** escreve cada um dos nós de uma lista **/ void printList(nodePtr p){ printf("-- -- -- \n"); while(p != NULL){ printf("ra: %d curso:%d rg:%s nome:%s\n",p->ra,p->curso,p->rg,p->nome); p = p->prox; } } int main(int argc, char *argv[]) { nodePtr lista2; nodePtr lista1 = makeList(turma1,12); printf("lista1:\n"); printList(lista1); lista2 = test(&lista1); printf("lista2:\n"); printList(lista2); return 0; }