Guest User

Untitled

a guest
Jul 19th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. //Lista .h
  2. /*
  3. * Implementacao de listas.
  4. */
  5.  
  6. #ifndef LISTAD_H
  7. #define LISTAD_H
  8.  
  9. typedef int elem_t;
  10.  
  11. typedef struct no{
  12. elem_t info;
  13. struct no *prox;
  14. } No_lista;
  15.  
  16. typedef No_lista * Lista;
  17.  
  18. /* Inicializa uma lista */
  19. void inicLista(Lista *p_l);
  20.  
  21. /* Verifica se a lista está vazia ou nao */
  22. int listaVazia(Lista *p_l);
  23.  
  24. /* Insere um elemento no inicio da lista */
  25. void insereInicio(Lista *p_l, elem_t e);
  26.  
  27. /* Insere um elemento no final da lista */
  28. void insereFim(Lista *p_l, elem_t e);
  29.  
  30. /* Insere um elemento na lista de maneira ordenada.
  31. Caso a lista nao esteja ordenada, ordena antes da insercao */
  32. void insereOrdenado(Lista *p_l, elem_t e);
  33.  
  34. /* Verifica se a lista esta ordenada */
  35. int ordenada(Lista *p_l);
  36.  
  37. /* Ordena a lista */
  38. void ordena(Lista *p_l);
  39.  
  40. /* Remove o elemento que esta no inicio da lista.
  41. Retorna 0 caso a lista esteja vazia */
  42. int removeInicio(Lista *p_l);
  43.  
  44. /* Remove o elemento que esta no final da lista.
  45. Retorna 0 caso a lista esteja vazia */
  46. int removeFim(Lista *p_l);
  47.  
  48. /* Remove o numero de valor e.
  49. Retorna 0 caso este numero não tenha sido encontrado */
  50. int removeValor(Lista *p_l, elem_t e);
  51.  
  52. /* Inverte os elementos de uma lista */
  53. void inverte(Lista *p_l);
  54.  
  55. /* Remove todos os numeros da lista */
  56. void libera(Lista *p_l);
  57.  
  58. /* Exibe o conteudo da lista */
  59. void exibe(Lista *p_l);
  60.  
  61. #endif
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68. //Lista.c
  69.  
  70.  
  71. #include "lista.h"
  72. #include <stdio.h>
  73. #include <stdlib.h>
  74.  
  75. void inicLista(Lista *p_l){
  76. *p_l=NULL;
  77. }
  78.  
  79. int listaVazia(Lista *p_l){
  80.  
  81. if(*p_l==NULL){
  82. return 1;
  83. }else{
  84. return 0;
  85. }
  86. }
  87.  
  88. void exibe(Lista *p_l)
  89. {
  90. No_lista *aux;
  91. aux=*p_l;
  92. while(aux!=NULL){
  93. printf("%d ",aux->info);
  94. aux=aux->prox;
  95. }
  96. }
  97.  
  98. /* Insere um elemento na lista de maneira ordenada.
  99. Caso a lista nao esteja ordenada, ordena antes da insercao */
  100. void insereOrdenado(Lista *p_l, elem_t e){
  101. int n,i,j,v[20],aux;
  102. for(i=1;i<n;i++){
  103. j=i-1;
  104.  
  105. /*while(v[j]<v[j-1]&&j-1>=0){
  106. aux=v[j-1];
  107. v[j-1]=v[j];
  108. v[j]=aux;
  109. j--;
  110. }*/
  111. aux=v[i];
  112. while(aux<v[j]&&j>=0){
  113. v[j+1]=v[j];
  114. j--;
  115. }
  116. v[j]=aux;
  117. }
  118. }
  119.  
  120. /* Verifica se a lista esta ordenada */
  121. int ordenada(Lista *p_l){}
  122.  
  123. /* Ordena a lista */
  124. void ordena(Lista *p_l){
  125. No_lista *i,*j,*aux;
  126.  
  127. if(!listaVazia(p_l)&&(*p_l)->prox!=NULL){
  128.  
  129. i=(*p_l)->prox;
  130. (*p_l)->prox=NULL;
  131. while(i!=NULL){
  132. j=(*p_l);
  133.  
  134. if(i->info < j->info){
  135. (*p_l)=i;
  136. i=i->prox;
  137. (*p_l)->prox=j;
  138. }else{
  139. while(j->prox!=NULL&&j->prox->info < i->info){
  140. j=j->prox;
  141.  
  142. }
  143. aux=i;
  144. i=i->prox;
  145. aux->prox=j->prox;
  146. j->prox=aux;
  147.  
  148. }
  149. }
  150.  
  151. }
  152.  
  153. }
  154.  
  155.  
  156.  
  157. void insereInicio(Lista *p_l, elem_t e){
  158. No_lista *novo;
  159. novo=malloc(sizeof(No_lista));
  160. novo->info=e;
  161. novo->prox=*p_l;
  162. *p_l=novo;
  163. }
  164.  
  165. int removeFim(Lista *p_l){
  166. No_lista *aux;
  167. aux=*p_l;
  168. if(aux==NULL){
  169. printf("\nLista Vazia");
  170. return 0;
  171. }else{
  172. if(aux->prox==NULL){
  173. free(aux);
  174. *p_l=NULL;
  175. return 1;
  176. }else{
  177. while(aux->prox->prox!=NULL){
  178. aux=aux->prox;
  179. }
  180. free(aux->prox);
  181. aux->prox=NULL;
  182. return 1;
  183. }
  184. }
  185. }
  186.  
  187. int removeInicio(Lista *p_l){
  188. if(*p_l!=NULL){
  189. No_lista *aux;
  190. aux=*p_l;
  191. *p_l=aux->prox;
  192. free(aux);
  193. return 1;
  194. }else{
  195. return 0;
  196. }
  197. }
  198.  
  199.  
  200.  
  201. void insereFim(Lista *p_l, elem_t e){
  202. if(*p_l == NULL){
  203. insereInicio(p_l,e);
  204. }else{
  205. No_lista *novo, *aux;
  206. novo=malloc(sizeof(No_lista));
  207. novo->info=e;
  208. aux=*p_l;
  209. while(aux->prox!=NULL){
  210. aux=aux->prox;
  211. }
  212. aux->prox=novo;
  213. novo->prox=NULL;
  214. }
  215. }
  216.  
  217. void libera(Lista *p_l){
  218. while(*p_l!=NULL){
  219. removeInicio(p_l);
  220. }
  221. }
  222.  
  223. int removeValor(Lista *p_l, elem_t e){
  224. No_lista *aux,*auxant;
  225. elem_t *a;
  226. if(listaVazia(p_l)){
  227. return 0;
  228. }
  229. aux=*p_l;
  230. auxant=NULL;
  231. while(aux->prox!=NULL&&aux->info!=e){
  232. auxant=aux;
  233. aux=aux->prox;
  234. }
  235. if(aux->info==e){
  236. if(*p_l==aux){
  237. *p_l=aux->prox;
  238.  
  239. }else{
  240. auxant->prox=aux->prox;
  241. }
  242. free(aux);
  243. return 1;
  244. }
  245. return 0;
  246. }
Add Comment
Please, Sign In to add comment