2017-07-18 4 views
0
#include<stdio.h> 

int tp=-1; 

void push(int arr[],int value) 
{ 
    arr[++tp]=value; 
} 

void pop(int arr[]) 
{ 
    if(size()==0) 
    { 
     puts("-1"); 
     return; 
    } 
    printf("%d\n",arr[tp--]); 
} 

int size() 
{ 
    return tp+1; 
} 

void empty() 
{ 
    if(size()==0)puts("1"); 
    else puts("0"); 
} 

int top(int arr[]) 
{ 
    if(size()==0) 
    { 
     puts("-1"); 
     return; 
    } 
    printf("%d\n",arr[tp]); 
} 

int main() 
{ 
    int arr[10000]; 
    unsigned int i,repeat; 
    char command[6]; 

    scanf("%d",&repeat);    //repeating 
    for(i=0;i<repeat;i++) 
    { 
    scanf("%s",command); 
    switch(command[0]) 
    { 
     case 'p': 
      if(command[1]=='u')   //push 
      { 
       int value; 
       scanf("%d",&value); 
       push(arr,value); 
      } 
      else pop(arr);    //pop. if stack is empty, output -1 
      break; 
     case 's': 
      printf("%d\n",size());  //print size of stack 
      break; 
     case 'e': 
      empty();     //if stack is empty, print 1. if not, print 0. 
      break; 
     case 't': 
      top(arr);     //print value that is on top of stack. if stack is empty, print -1 
      break; 
    } 
} 

}Comment puis-je faire en sorte que ce code de pile utilise moins de mémoire? (C lang)

Je veux faire ce code utiliser moins de mémoire ... ce code utilise 1116KB, mais un code avec la même algorithme utilise 1000Ko. Comment puis-je faire en sorte que ce code utilise moins de mémoire?

ce code fonctionne comme ceci -

ce code a 5 commandes:

1.Push X: ajoute X dans la pile

2.pop: Supprime un élément de la pile et impression il.

3.Size: imprimer le nombre d'éléments de la pile

4.Videz: si cette pile est vide, sinon impression 1. Imprimer 0

5.top: imprimer l'élément qui est sur le dessus de la pile

étapes

  1. valeur d'entrée

    (quantité de boucle de répétition)

  2. commande d'entrée

  3. profit !!

Répondre

0

Il peut y avoir plusieurs solutions à ce problème. Puisque vous utilisez un tableau statique et une variable supérieure pour garder une trace du dernier élément de votre pile, vous obtenez la même complexité d'espace de l'algorithme que la taille de la matrice reste la même à chaque fois. Par conséquent, vous devez utiliser l'allocation de mémoire dynamique lors de l'ajout d'un élément à la pile, cela fait référence à l'utilisation de fonctions malloc ou calloc dans C pour affecter de la mémoire à chaque fois que vous ajoutez un emplacement. Alors que l'utilisation de la fonction libre permet d'afficher un élément et de libérer de la mémoire qui lui est affectée.

Voici le code pour la mise en œuvre d'une pile à l'aide des listes chaînées:

#include<stdio.h> 

struct Node 
{ 
    int data; 
    struct Node *next; 
}*top = NULL; 

void push(int); 
void pop(); 
void display(); 

void main() 
{ 
    int choice, value; 
    printf("1. Push\n2. Pop\n3. Display\n4. Exit\n"); 
    while(1){ 
     printf("Enter your choice: "); 
     scanf("%d",&choice); 
     switch(choice){ 
    case 1: printf("\nEnter value to insert: "); 
     scanf("%d", &value); 
     push(value); 
     break; 
    case 2: pop(); break; 
    case 3: display(); break; 
    case 4: exit(0); 
    default: printf("\nWrong selection!!! \n"); 
     } 
    } 
} 
void push(int value) 
{ 
    struct Node *newNode; 
    newNode = (struct Node*)malloc(sizeof(struct Node)); 
    newNode->data = value; 
    if(top == NULL) 
     newNode->next = NULL; 
    else 
     newNode->next = top; 
    top = newNode; 
    printf("\nInsertion is Success!!!\n"); 
} 
void pop() 
{ 
    if(top == NULL) 
     printf("\nStack is Empty!!!\n"); 
    else{ 
     struct Node *temp = top; 
     printf("\nDeleted element: %d", temp->data); 
     top = temp->next; 
     free(temp); 
    } 
} 
void display() 
{ 
    if(top == NULL) 
     printf("\nStack is Empty!!!\n"); 
    else{ 
     struct Node *temp = top; 
     while(temp->next != NULL){ 
    printf("%d--->",temp->data); 
    temp = temp -> next; 
     } 
     printf("%d",temp->data); 
    } 
} 

Vous pouvez également valider l'utilisation de la mémoire à codechef's online IDE car il utilise 9432 KB.