Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <stdlib.h>
- struct lista{
- int info;
- struct lista* prox;
- };
- typedef struct lista Lista;
- /* insere circular */
- Lista* insere_circular (Lista* l, int i){
- Lista* novo = (Lista*)malloc(sizeof(Lista));
- Lista* p = l;
- novo->info = i;
- if (l==NULL){
- novo->prox=novo;
- return novo;
- }
- for(;p->prox!=l;p=p->prox);
- p->prox=novo;
- novo->prox=l;
- return novo;
- }
- /* insere ordenando */
- Lista* insere_ordenado (Lista* l, int i){
- Lista* novo = (Lista*)malloc(sizeof(Lista));
- Lista* p = l;
- Lista* ant = NULL;
- Lista* t = p;
- int cont = 0;
- novo->info = i;
- if (l==NULL){
- novo->prox=novo;
- return novo;
- }
- do {
- p = p->prox;
- cont++;
- }while(p!=l);
- while(cont>0 && p->info<i){
- ant = p;
- p=p->prox;
- cont--;
- }
- if (ant==NULL)
- l=novo;
- for(;t->prox!=p;t=t->prox);
- t->prox=novo;
- novo->prox=p;
- return l;
- }
- /* imprime */
- void imprime_circular (Lista* l){
- Lista* p = l;
- printf ("\n");
- do {
- printf ("\neu=%p prox=%p sou=%d", p, p->prox, p->info);
- p=p->prox;
- }while(p!=l);
- }
- /* busca dado */
- Lista* busca_circular(Lista* l, int v){
- Lista* p = l;
- do {
- if (p->info == v)
- return p;
- p=p->prox;
- }while(p!=l);
- return NULL;
- }
- /* retira dado */
- Lista* retira_circular(Lista* l, int v){
- Lista* p = busca_circular(l,v);
- Lista* t = p;
- if (p==NULL){
- printf("\nNao encontrado!");
- return l;
- }
- if (p==l)
- l=p->prox;
- for (;t->prox!=p;t=t->prox);
- t->prox=p->prox;
- free(p);
- return l;
- }
- /* libera memória */
- void libera_circular(Lista* l){
- Lista* p = l;
- int i;
- do {
- p=p->prox;
- i++;
- }while(p!=l);
- while (i){
- Lista* t = p->prox;
- free (p);
- p = t;
- i--;
- }
- }
- /* teste simples */
- int main(){
- Lista* l = NULL;
- l = insere_ordenado (l,78);
- l = insere_ordenado (l,2);
- l = insere_ordenado (l,20);
- l = insere_ordenado (l,4);
- l = insere_ordenado (l,30);
- l = insere_ordenado (l,6);
- printf("--> Lista encadeada circular com ordenacao:");
- imprime_circular(l);
- printf("\n\n");
- l = retira_circular (l, 20);
- printf("--> Lista despois de retirar elemento 20:");
- imprime_circular(l);
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement