Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /****************** TIPO PARA A QUESTAO ********************/
- /* Tipo No: representa um no´ da lista simplesmente encadeada nos itens da questao 2 */
- typedef struct no No;
- struct no
- {
- int codigo; /* pode haver codigos repetidos */
- int quantidade;
- No* prox;
- };
- /****************** RESPOSTAS ********************/
- /* 1 - Funcao exibeLista */
- void exibeLista(No* lst) {
- No* p;
- for (p = lst; p != NULL; p = p->prox) {
- printf("{%d, %d}\n", p->codigo, p->quantidade);
- }
- }
- /* 2 - Funcao RECURSIVA buscaPosicao */
- int buscaPosicao(No* lst, int pos) {
- int i = 0;
- i++;
- if (lst ==NULL || pos == i) {
- return -1;
- }
- if (pos != i) {
- buscaPosicao(lst->prox, pos);
- }
- else {
- return lst->codigo;
- }
- }
- /* 3 - Funcao eliminaCodigo */
- No* eliminaCodigo(No* lst, int cod, int* nEliminados, int* totalQtdEliminada) {
- No* p = lst, * ant, * pos;
- int eliminados = 0, qtdEliminada=0;
- while (p != NULL) {
- ant = p;
- if (p->codigo == cod ) {
- eliminados += 1;
- qtdEliminada += p->quantidade;
- free(p);
- }
- pos = ant->prox;
- }
- nEliminados = eliminados;
- totalQtdEliminada = qtdEliminada;
- return p;
- }
- /* FUNCAO DADA:
- constroiLista: constroi e retorna uma lista encadeada para ser usada nos testes da Q2 */
- No* constroiLista(void); /* funcao dada que constroi a lista */
- void libera(No* lst);
- /* Teste suas funcoes nos espaços sinalizados na main incluindo variaveis e codigos
- necessarios, fazendo as chamadas e exibindo as respostas */
- int main(void)
- {
- No* lst = constroiLista(); /* MONTAGEM DA LISTA PARA A QUESTAO 2 */
- /* INSIRA aqui eventuais variáveis que você julgar necessárias: */
- int codPos, nEliminados=0, totalQtdEliminada=0;
- /* INSIRA aqui os seus testes das funcoes: */
- /* Q1 */
- exibeLista(lst);
- /* Q2 */
- codPos = buscaPosicao(lst, 6);
- printf("Codigo da pos 6: %d\n", codPos );
- /* Q3 */
- lst = eliminaCodigo(lst, 444, nEliminados, totalQtdEliminada);
- printf("Eliminados: %d || Qtd Eliminada: %d\n", nEliminados, totalQtdEliminada);
- exibeLista(lst);
- libera(lst);
- return 0;
- }
- No* insIni(No* lst, int c, int q)
- {
- No* novo = (No*)malloc(sizeof(No));
- novo->codigo = c; novo->quantidade = q; novo->prox = lst;
- return novo;
- }
- No* constroiLista(void)
- {
- No* prim = NULL;
- int cod[10] = { 222,444,999,222,555,444,444,222,888,444 };
- int qt[10] = { 30 ,10, 25 , 15, 10, 18, 13, 21, 34, 13 };
- int i;
- for (i = 0; i < 10; i++)
- prim = insIni(prim, cod[i], qt[i]);
- return prim;
- }
- void libera(No* lst) {
- No* p = lst, * t;
- while (p != NULL) {
- t = p->prox;
- free(p);
- p = t;
- }
- printf("\nMemoria liberada !");
- }
Add Comment
Please, Sign In to add comment