#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;
}
}
}
我想让这段代码使用更少的内存...... 此代码使用1116KB, 但具有相同算法的代码使用1000KB。 如何让这段代码使用更少的内存?
此代码的工作方式如下 -
此代码有5个命令:
1.push X:在堆栈中添加X
2.pop:从堆栈中删除一个项目并打印出来。
3.size:打印堆栈元素的数量
4.empty:如果此堆栈为空,则打印1.如果不打印0
5.top:打印堆栈顶部的项目
步骤
输入值(重复循环量)
输入命令
利润!!
答案 0 :(得分:0)
此问题可以有多种解决方案。因为,您使用静态数组和顶部变量来跟踪堆栈的最后一个元素,最终会得到与算法相同的空间复杂度,因为每次数组的大小都保持不变。
因此,您应该在向堆栈添加任何元素时使用动态内存分配,这是指在C中使用malloc或calloc函数,以便在每次添加位置时从堆中分配内存。而使用自由函数来弹出一个元素和分配给它的空闲内存。
以下是使用链接列表实现堆栈的代码:
#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);
}
}
您还可以使用9432 KB验证codechef's online IDE内存的使用情况。