Jump to content
Fórum Script Brasil
  • 0

Implemente uma lista estática, com todas as funções e monte um menu de opções.


lucas costa da cruz

Question

#include <stdio.h>
#include <stdlib.h>
#define MAXTAM 1000
int Frente, Tras, Lista[MAXTAM];
void Lista_Construtor(){
Frente=0;
Tras=-1;
}
int Lista_Vazia(){
if(Tras==-1)
return 1;
else
return 0;
}
int Lista_Cheia(){
if(Tras==MAXTAM-1)
return 1;
else
return 0;
}
int Lista_Tamanho(){
return Tras+1;
}
int Lista_Inserir_Inicio(int Valor){
if(Lista_Cheia()){
return 0;
}else{
/*se quero inserir na posição 0,
vou deslocar todos os elementos para frente*/
for(int i=Tras+1;i>Frente;i--){
Lista[i]=Lista[i-1];
}
Lista[Frente]=Valor;
Tras++;
return 1;
  }
}
int Lista_Inserir_Fim(int Valor){
if(Lista_Cheia()){
return 0;
}else{
Tras++;
Lista[Tras]=Valor;
return 1;
  }
}
int Lista_Inserir(int Valor, int Posicao){
if(Lista_Cheia()){
return 0;
}else{
/* Para verificar se a posição
está no meio da lista */
if(Posicao>Frente && Posicao<Tras){
for(int i=Tras+1;i>Posicao;i--){
Lista[i]=Lista[i-1];
}
Lista[Posicao]=Valor;
Tras++;
return 1;
}else{ 
return 0;
   }
  }
}
int Lista_Remover_Inicio(int *Valor){
if(Lista_Vazia()){
return 0;
}else{
*Valor =Lista[Frente];
for(int i=Frente;i<Tras;i++){
Lista[i]=Lista[i+1];
   }
Tras--;
  }
}
int Lista_Remover_Fim(int *Valor){
if(Lista_Vazia()){
return 0;
}else{
*Valor=Lista[Tras];
Tras--;
return 1;
  }
}
int Lista_Remover(int *Valor, int Posicao){
if(Lista_Vazia()){
return 0;
}else{
if(Posicao>Frente && Posicao<Tras){
*Valor=Lista[Posicao];
for(int i=Posicao;i<Tras;i++){
Lista[i]=Lista[i+1];
}
Tras--;
return 1;
   }
  }
}
int Lista_Get_toda(int *Valor){
if(Lista_Vazia()){
return 0;
}else{
*Valor=Lista[Frente];
return 1;
  }
}
int Lista_Get_inicio(int *Valor){
if(Lista_Vazia()){
return 0;
}else{
*Valor=Lista[Frente];
return 1;
  }
}
int Lista_Get_Fim(int *Valor){
if(Lista_Vazia()){
return 0;
}else{
*Valor=Lista[Tras];
return 1;
  }
}
int Lista_Busca_Valor(int Valor, int *Posicao){
int i;
if(Lista_Vazia()){
return 0;
}else{
for(i=Frente;i<Tras;i++){
if(Lista[i]==Valor){
break;
  }
}
if(i==Tras){
return 0;
}else{
*Posicao=i; 
return 1;
   }
  }
}
int Lista_Busca_Posicao(int *Valor, int Posicao){
if(Lista_Vazia()){
return 0;
}else{
if(Posicao>Frente && Posicao<Tras){
*Valor=Lista[Posicao];
return 1;
}else{
return 0;
   }
  }
}
int main(){
int i,Valor,op=0,pos;
Lista_Construtor();
while(op!=12){
printf("*** Menu de opções ***\n");
printf("1-Inserir início\n");
printf("2-Inserir fim\n");
printf("3-Inserir meio\n");
printf("4-Excluir início\n");
printf("5-Excluir fim\n");
printf("6-Excluir meio\n");
printf("7-Mostrar toda lista\n");
printf("8-Mostrar primeiro item da lista\n");
printf("9-Mostrar último item da lista\n");
printf("10-Mostrar a posição de um item da lista\n");
printf("11-Mostrar o valor de uma posição\n");
printf("12-Sair\n");
printf("Escolha uma opção: ");
scanf("%d", &op);
switch(op){
    case 1:
        printf("Digite o valor a ser inserido: ");
        scanf("%d", &Valor);
        Lista_Inserir_Inicio(Valor);
        break;
    case 2:
        printf("Digite o valor a ser inserido: ");
        scanf("%d", &Valor);
        Lista_Inserir_fim(Valor);
        break;
      case 3:
        printf("Digite o valor a ser inserido: ");
        scanf("%d", &Valor);
        printf("Digite a posição que deseja inserir: ");
        scanf("%d", &pos);
        Lista_ Inserir_meio(int Valor, pos); 
        break;
      case 4:
        printf("Digite a remoção do início: ");
        scanf("%d", &*Valor);
        Lista_ Excluir_inicio(*Valor); 
        break;
        case 5:
        printf("Digite a remoção do fim: ");
        scanf("%d", &*Valor);
        Lista_ Excluir_fim(*Valor); 
        break;
        case 6:
        printf("Digite a remoção do meio: ");
        scanf("%d", &Valor);
        printf("Digite a posição que deseja remover: ");
        scanf("%d", &*Posicao);
        Lista_ Excluir_meio(intValor, * pos); 
        break;
         case 7:
        printf("Digite ao a mostrar toda lista: ");
        scanf("%d", &Valor);
        Lista_ mostrar_toda_lista(Valor);
        break;
       case 8:
        printf("Digite ao a mostrar primeiro item da lista: ");
        scanf("%d", &*Valor);
        Lista_ mostrar_primeiro_item_da_lista(*Valor);
        break;
       case 9:
        printf("Digite ao a mostrar último item da lista: ");
        scanf("%d", &*Valor);
        Lista_ mostrar_ultimo_item_da_lista(*Valor);
        break;
        case 10:
        printf("Digite ao a mostrar a posição de um item da lista: ");
        scanf("%d", &Valor);
        printf("Digite a posição que deseja mostrar na lista: ");
        scanf("%d", &* pos);
        Lista_ mostrar_posicao_de_um_item_da_lista(intValor, *pos);
        break;
        case 11:
        printf("Digite ao a mostrar o valor de uma posição: ");
        scanf("%d", &*Valor
        printf("Digite a posição que deseja mostrar no valor: ");
        scanf("%d", &pos);
        Lista_ mostrar_posicao_de_um_valor_da_lista(int*Valor, pos);
        break;
        case 12:
        default:
        printf("Valor Invalido!\n");
        system("PAUSE");

         }

   }
 return 0;
}

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

A impressão é que está mais complicado do que precisa ser uma lista estática sequencial — L.E.S. Outra coisa, contextualizar o exemplo com menu, depois que construir a lista.

Um exemplo de estrutura de dados é o tipo int, ela possui métodos que permite realizar operação aritmética. Então, as funções de sua L.E.S, sãos as operações.

A primeira operação é DEFINIR: "Cria-se", ou basicamente, aloca-se um vetor de tipo. No caso, vamos escolher a estrutura int.

#include <stdlib.h>
void *
lista_definir(unsigned capacidade) {
    int *p= malloc((capacidade * sizeof(int)) + (2 * sizeof(int)));
    if (p == NULL) {
      perror("Memoria Livre Insuficiente.");
      return p;
    }
    *(0 + p)= capacidade;
    *(1 + p)= 0; //Tamanho é o números de elementos inseridos.
    return p;
}

Na primeira linha, aloca-se dinamicamente a capacidade da lista, mais dos itens que guardam informações da lista, sendo sua capacidade e tamanho, respectivamente, o primeiro e segundo inteiros na sequência. Com valores atribuídos próximo do retorno da função.

/*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void *
lista_definir(unsigned capacidade) {
    int *p= malloc((capacidade * sizeof(int)) + (2 * sizeof(int)));
    if (p == NULL) {
      perror("Memoria Livre Insuficiente.");
      return p;
    }
    *(0 + p)= capacidade;
    *(1 + p)= 0; //Tamanho é o números de elementos inseridos.
    return p;
}
int main(void) {
    void *numero_de_habitantes= lista_definir(10);
    free(numero_de_habitantes);
    return 0;
}

 

Compreende? A seguir, tente as funções que entregam o tamanho, e a capacidade da lista, use o que já conhece de ponteiros.

[🙂

Edited by britivaldo
Link to comment
Share on other sites

  • 0
Em 06/12/2021 em 10:48, britivaldo disse:

A impressão é que está mais complicado do que precisa ser uma lista estática sequencial — L.E.S. Outra coisa, contextualizar o exemplo com menu, depois que construir a lista.

Um exemplo de estrutura de dados é o tipo int, ela possui métodos que permite realizar operação aritmética. Então, as funções de sua L.E.S, sãos as operações.

A primeira operação é DEFINIR: "Cria-se", ou basicamente, aloca-se um vetor de tipo. No caso, vamos escolher a estrutura int.

#include <stdlib.h>
void *
lista_definir(unsigned capacidade) {
    int *p= malloc((capacidade * sizeof(int)) + (2 * sizeof(int)));
    if (p == NULL) {
      perror("Memoria Livre Insuficiente.");
      return p;
    }
    *(0 + p)= capacidade;
    *(1 + p)= 0; //Tamanho é o números de elementos inseridos.
    return p;
}

Na primeira linha, aloca-se dinamicamente a capacidade da lista, mais dos itens que guardam informações da lista, sendo sua capacidade e tamanho, respectivamente, o primeiro e segundo inteiros na sequência. Com valores atribuídos próximo do retorno da função.

/*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void *
lista_definir(unsigned capacidade) {
    int *p= malloc((capacidade * sizeof(int)) + (2 * sizeof(int)));
    if (p == NULL) {
      perror("Memoria Livre Insuficiente.");
      return p;
    }
    *(0 + p)= capacidade;
    *(1 + p)= 0; //Tamanho é o números de elementos inseridos.
    return p;
}
int main(void) {
    void *numero_de_habitantes= lista_definir(10);
    free(numero_de_habitantes);
    return 0;
}

 

Compreende? A seguir, tente as funções que entregam o tamanho, e a capacidade da lista, use o que já conhece de ponteiros.

[🙂

obrigado  por ter respondido o meu comentário e desculpe por não ter respondido antes estava com muitas tarefas no ano passado posso ser seu amigo 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...