1.获取栈中的最小值
参考了对该问题的解法,利用C语言实现了带基本功能和getMin功能的栈,同理还可以添加getMax功能,代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 6
typedef struct{
int stack[MAX_STACK_SIZE];
int top;
}element;
element init()
{
element temp;
temp.top=-1;
return temp;
}
int isEmpty(element *data)
{
if(data->top==-1)
return 1;
else
return 0;
}
int isFull(element *data)
{
if(data->top>=MAX_STACK_SIZE-1)
return 1;
else
return 0;
}
int push(int value,element *data)
{
if(isFull(data)==1)
return 0;
else
data->stack[++(data->top)]=value;
return 1;
}
int pop(element *data)
{
if(isEmpty(data)==1)
return 0;
else
return data->stack[(data->top)--];
}
void getMin(element *data,element *min)
{
int i=0;
int value=0;
int minTop=0;
for(i=0;i<MAX_STACK_SIZE;i++)
{
printf("please input value to push into stack:\n");
scanf("%d",&value);
push(value,data);
if(min->top==-1)
{
push(value,min);
}
else
{
minTop=min->stack[min->top];
if(value<minTop)
push(value,min);
else
push(minTop,min);
}
}
}
print(element *data)
{
for(int i=data->top;i>=0;i--)
{
if(i>0)
printf("%d ->",data->stack[i]);
else
printf("%d",data->stack[i]);
}
printf("\n");
}
void main()
{
element stackData,stackMin,stackMax;
stackData=init();
stackMin=init();
getMin(&stackData, &stackMin);
print(&stackData);
print(&stackMin);
printf("%d\n",stackMin.stack[stackMin.top]);
}
2.利用两个栈实现队列操作
void doubleStack(element *stackPush, element *stackPop)
{
int i=0;
int value=0;
for(i=0;i<MAX_STACK_SIZE;i++)
{
printf("please input value to push into stack:\n");
scanf("%d",&value);
push(value,stackPush);
}
if(isEmpty(stackPop)==1)
{
while(stackPush->top>-1)
{
value=pop(stackPush);
push(value,stackPop);
}
}
}