#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 80
typedef struct
{
unsigned int stack[MAX_STACK_SIZE];
int top; //top 默认值是-1,所以应该是int型
unsigned int down_min[MAX_STACK_SIZE]; //储存栈中各个元素到栈底元素中的最小值,eg 栈[5,2,3,4,8,1] 5为栈底,则down_min为[5,2,2,2,2,1]
}sequence_stack;
/*初始化栈*/
sequence_stack* initialize_seqstack()
{
sequence_stack* seqstack = NULL;
seqstack = (sequence_stack*)malloc(sizeof(sequence_stack));
memset(seqstack,0,sizeof(sequence_stack));
seqstack->top = -1;
return seqstack;
}
/*销毁栈*/
void destroy_seqstack(sequence_stack* seqstack)
{
if(seqstack != NULL)
{
free(seqstack);
}
return;
}
/*入栈*/
unsigned int push_seqstack(sequence_stack *seqstack, unsigned int value)
{
if(seqstack != NULL)
{
if(seqstack->top == MAX_STACK_SIZE-1)
{
printf("stack is full\n");
return -1;
}
else
{ seqstack->stack[++seqstack->top] = value;
if(seqstack->top == 0)
{
seqstack->down_min[seqstack->top] = value;
}
else
{ if(value < seqstack->down_min[seqstack->top-1])
{
seqstack->down_min[seqstack->top] = value;
}
else
{
seqstack->down_min[seqstack->top] = seqstack->down_min[seqstack->top-1];
}
}
return 0;
}
}
return -1;
}
/*出栈*/
unsigned int pop_seqstack(sequence_stack *seqstack)
{
if(seqstack != NULL)
{
if(seqstack->top == -1)
{
printf("stack is empty\n");
return -1;
}
else
{
return seqstack->stack[seqstack->top--];
}
}
}
/*打印栈元素*/
void print_seqstack(sequence_stack *seqstack)
{
if(seqstack != NULL)
{
int i = 0;
printf("stack from end to top :\n");
for(i=0;i<=(seqstack->top);i++)
{
printf("%d,",seqstack->stack[i]);
}
printf("\n");
}
}
/*打印最小数组元素*/
void print_seqstack_min_array(sequence_stack *seqstack)
{
if(seqstack != NULL)
{
int i = 0;
printf("down_min from end to top :\n");
for(i=0;i<=(seqstack->top);i++)
{
printf("%d,",seqstack->down_min[i]);
}
printf("\n");
}
}
/*打印当前栈的最小值*/
void printf_minvalue(sequence_stack *seqstack)
{
if(seqstack != NULL)
{
printf("min value is %d\n",seqstack->down_min[seqstack->top]);
}
return ;
}
void main()
{
sequence_stack *seqstack = initialize_seqstack();
push_seqstack(seqstack,5);
push_seqstack(seqstack,13);
push_seqstack(seqstack,6);
pop_seqstack(seqstack);
pop_seqstack(seqstack);
pop_seqstack(seqstack);
push_seqstack(seqstack,2);
push_seqstack(seqstack,33);
push_seqstack(seqstack,7);
print_seqstack(seqstack);
print_seqstack_min_array(seqstack);
destroy_seqstack(seqstack);
}
C语言数组实现栈的基本操作,并利用O(1)求出栈中最小元素
最新推荐文章于 2024-10-22 07:30:00 发布