使用动态内存分配的堆栈操作
Operations in stack using dynamic memory allocation
我尝试编写一个程序来实现堆栈中的各种操作,例如 pop、push、traverse、peek 等。但我使用的是静态内存分配。如何使用动态内存分配实现程序?
(我是编程初学者,对动态内存分配不是很了解)
这是我使用静态内存分配的程序:
#include<stdio.h>
#define CAPACITY 5
int stack[CAPACITY] ,top=-1;
void main()
{
int ch,item;
while(1)
{
printf("1.push\n");
printf("2.pop\n");
printf("3.peek \n");
printf("4.traverse\n");
printf("5.Quit\n");
printf("Enter your choice :\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter the element to push :\n");
scanf("%d",&item);
push(item);
break;
case 2:
item = pop();
if(item==0)
{
printf("stack is underflow\n");
}
else
{
printf("popped item : %d\n",item);
}
break;
case 3: peek();
break;
case 4: traverse();
break;
case 5: exit(0);
default:printf("Invalid input \n\n");
}
}
}
void push(int ele)
{
if(isfull())
{
printf("Stack is overflow\n");
}
else
{
top++;
stack[top] = ele;
printf("%d pushed \n",ele);
}
}
int isfull()
{
if(top==CAPACITY-1)
{
return 1;
}
else
{
return 0;
}
}
int pop()
{
if(isempty())
{
return 0;
}
else
{
return stack[top--];
}
}
int isempty()
{
if(top==-1)
{
return 1;
}
else
{
return 0;
}
}
void peek()
{
if(isempty())
{
printf("stack is underflow\n");
}
else
{
printf("peek element :%d\n",stack[top]);
}
}
void traverse()
{
if(isempty())
{
printf("stack is empty\n");
}
else
{
int i;
printf("Stack elements are : \n");
for(i=0;i<=top;i++)
{
printf("%d \n",stack[i]);
}
}
}
How can I implement the program using dynamic memory allocation?
如果你想在你的程序中使用DMA (dynamic memory allocation)
,这里是修改后的代码。现在您的程序将在 运行 时间初始化堆栈。你的程序里有一些warnings
我也修改了
#include<stdio.h>
#include<stdlib.h>
//#define CAPACITY 5
//int stack[CAPACITY], top=-1;
int *stack, top = -1, CAPACITY;
// Prototype of Functions
void push(int ele);
int isfull();
int pop();
int isempty();
void peek();
void traverse();
// main()
int main(void)
{
int ch,item;
printf("Input Capacity of the stack: ");
scanf("%d", &CAPACITY);
// Dynamic Memory Allocation for the stack...
stack = (int *)malloc(CAPACITY*sizeof(int));
while(1)
{
printf("1.push\n");
printf("2.pop\n");
printf("3.peek \n");
printf("4.traverse\n");
printf("5.Quit\n");
printf("Enter your choice :\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter the element to push :\n");
scanf("%d",&item);
push(item);
break;
case 2:
item = pop();
if(item==0)
{
printf("stack is underflow\n");
}
else
{
printf("popped item : %d\n",item);
}
break;
case 3: peek();
break;
case 4: traverse();
break;
case 5: exit(0);
default:printf("Invalid input \n\n");
}
}
}
// Definition of Functions.
void push(int ele)
{
if(isfull())
{
printf("Stack is overflow\n");
}
else
{
top++;
stack[top] = ele;
printf("%d pushed \n",ele);
}
}
int isfull()
{
if(top==CAPACITY-1)
{
return 1;
}
else
{
return 0;
}
}
int pop()
{
if(isempty())
{
return 0;
}
else
{
return stack[top--];
}
}
int isempty()
{
if(top==-1)
{
return 1;
}
else
{
return 0;
}
}
void peek()
{
if(isempty())
{
printf("stack is underflow\n");
}
else
{
printf("peek element :%d\n",stack[top]);
}
}
void traverse()
{
if(isempty())
{
printf("stack is empty\n");
}
else
{
int i;
printf("Stack elements are : \n");
for(i=0;i<=top;i++)
{
printf("%d \n",stack[i]);
}
}
}
现在,如果你想要解释,那么你应该参考这个DMA
我尝试编写一个程序来实现堆栈中的各种操作,例如 pop、push、traverse、peek 等。但我使用的是静态内存分配。如何使用动态内存分配实现程序?
(我是编程初学者,对动态内存分配不是很了解)
这是我使用静态内存分配的程序:
#include<stdio.h>
#define CAPACITY 5
int stack[CAPACITY] ,top=-1;
void main()
{
int ch,item;
while(1)
{
printf("1.push\n");
printf("2.pop\n");
printf("3.peek \n");
printf("4.traverse\n");
printf("5.Quit\n");
printf("Enter your choice :\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter the element to push :\n");
scanf("%d",&item);
push(item);
break;
case 2:
item = pop();
if(item==0)
{
printf("stack is underflow\n");
}
else
{
printf("popped item : %d\n",item);
}
break;
case 3: peek();
break;
case 4: traverse();
break;
case 5: exit(0);
default:printf("Invalid input \n\n");
}
}
}
void push(int ele)
{
if(isfull())
{
printf("Stack is overflow\n");
}
else
{
top++;
stack[top] = ele;
printf("%d pushed \n",ele);
}
}
int isfull()
{
if(top==CAPACITY-1)
{
return 1;
}
else
{
return 0;
}
}
int pop()
{
if(isempty())
{
return 0;
}
else
{
return stack[top--];
}
}
int isempty()
{
if(top==-1)
{
return 1;
}
else
{
return 0;
}
}
void peek()
{
if(isempty())
{
printf("stack is underflow\n");
}
else
{
printf("peek element :%d\n",stack[top]);
}
}
void traverse()
{
if(isempty())
{
printf("stack is empty\n");
}
else
{
int i;
printf("Stack elements are : \n");
for(i=0;i<=top;i++)
{
printf("%d \n",stack[i]);
}
}
}
How can I implement the program using dynamic memory allocation?
如果你想在你的程序中使用DMA (dynamic memory allocation)
,这里是修改后的代码。现在您的程序将在 运行 时间初始化堆栈。你的程序里有一些warnings
我也修改了
#include<stdio.h>
#include<stdlib.h>
//#define CAPACITY 5
//int stack[CAPACITY], top=-1;
int *stack, top = -1, CAPACITY;
// Prototype of Functions
void push(int ele);
int isfull();
int pop();
int isempty();
void peek();
void traverse();
// main()
int main(void)
{
int ch,item;
printf("Input Capacity of the stack: ");
scanf("%d", &CAPACITY);
// Dynamic Memory Allocation for the stack...
stack = (int *)malloc(CAPACITY*sizeof(int));
while(1)
{
printf("1.push\n");
printf("2.pop\n");
printf("3.peek \n");
printf("4.traverse\n");
printf("5.Quit\n");
printf("Enter your choice :\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter the element to push :\n");
scanf("%d",&item);
push(item);
break;
case 2:
item = pop();
if(item==0)
{
printf("stack is underflow\n");
}
else
{
printf("popped item : %d\n",item);
}
break;
case 3: peek();
break;
case 4: traverse();
break;
case 5: exit(0);
default:printf("Invalid input \n\n");
}
}
}
// Definition of Functions.
void push(int ele)
{
if(isfull())
{
printf("Stack is overflow\n");
}
else
{
top++;
stack[top] = ele;
printf("%d pushed \n",ele);
}
}
int isfull()
{
if(top==CAPACITY-1)
{
return 1;
}
else
{
return 0;
}
}
int pop()
{
if(isempty())
{
return 0;
}
else
{
return stack[top--];
}
}
int isempty()
{
if(top==-1)
{
return 1;
}
else
{
return 0;
}
}
void peek()
{
if(isempty())
{
printf("stack is underflow\n");
}
else
{
printf("peek element :%d\n",stack[top]);
}
}
void traverse()
{
if(isempty())
{
printf("stack is empty\n");
}
else
{
int i;
printf("Stack elements are : \n");
for(i=0;i<=top;i++)
{
printf("%d \n",stack[i]);
}
}
}
现在,如果你想要解释,那么你应该参考这个DMA