H面试(22):设计一个栈,能输出当前栈中最小元素

来源:互联网 发布:java list泛型转换 编辑:程序博客网 时间:2024/06/05 07:35

 

#include<stdio.h>#include<malloc.h>#include<assert.h>struct StcakElement{int data;  //插入的元素的数值int min;  //存放当前栈中最小元素};struct Stack{StcakElement * pStackElement;    //指向栈原始的指针,结合top就能操作栈顶元素int size;    //存放栈的容量           int top;   //存放下一个可用的栈的位置}; void StackInit(Stack* & pstack, int  maxsize )  //栈的初始化 {assert(pstack);    pstack->size = maxsize;pstack->top = 0;pstack->pStackElement =(StcakElement * )malloc(sizeof(StcakElement)*maxsize);}void StackFree (Stack stack)  //将栈销毁,释放申请的空间,减size设为0;{free(stack.pStackElement);stack.size = 0;stack.top = 0;}void StackPush(Stack & stack, int data)  //入栈操作,把里面的一些元素初始化{if(stack.top == stack.size)printf("out of stack space");StcakElement *  p = stack.pStackElement+stack.top;//也可以不用这样的一个指针变量P,这样写是因为后面的实在有点长  p->data = data;if(stack.top == 0){  p->min =data;}else{p->min = (stack.pStackElement[stack.top-1]).min;//如果top不为0,则当前入栈的元素的min存放的是上一个栈顶元素中的最小值;}if(p-> min >data)    //将当前元素和入栈前的最小元素进行比较,如果比之前的的小,就把当前入栈的元素设为自己的datap->min = data;(stack.top)++;}void StackPop(Stack  &stack)//出栈操作{if(stack.top == 0)printf("stack is empty"); stack.pStackElement[--stack.top]; //将指示栈顶原始的值减1}int StackMin(Stack stack)   //找到当前栈顶元素里存放的当前栈的最小值{if(stack.top == 0)printf("stack is empty");return stack.pStackElement[stack.top-1].min;}int main( ){  Stack stack;    //初始化Stack * pa = & stack ;    StackInit( pa,5);StackPush(*pa,  0);    StackPush(*pa,  5);StackPush(*pa, 3);StackPush(*pa,1);    StackPop(*pa);    int min = StackMin(*pa);printf("栈中当前最小的元素为:%d\n", min);return 0;}


 

 

 

 

 

 

原创粉丝点击