Ir para conteúdo
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

Pergunta

#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 para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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.

[🙂

Editado por britivaldo
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...