设计包含min函数的栈

来源:互联网 发布:mac win7激活密钥 编辑:程序博客网 时间:2024/05/16 09:11

废话不多少 直接帖代码,注意函数传递参数的类型

#include <stdio.h>#include <stdlib.h>//模拟包含栈中最小元素的栈struct MinStackElement{   int value;   int mini;};struct MinStack{    struct MinStackElement* data;//栈的空间    int size; //栈的大小    int top;//记录栈顶的位置,可以push的位置};struct MinStack initialStack(int maxSize){ struct MinStack  minStack; minStack.size=maxSize; minStack.top=0; minStack.data=(struct MinStackElement*)malloc(sizeof(struct MinStackElement)*maxSize); printf("initial stack success!!!!\n"); return minStack;}void minStackPush(int value,struct MinStack *stack){    printf("pushing %d to stack",value);if(stack->top==stack->size){    printf("sorry the stack is full!!! cannot push\n");    return;}struct MinStackElement* topElement=&(stack->data[stack->top]); topElement->value=value; topElement->mini=(stack->top==0)?value:(stack->data[stack->top-1].mini); if(value<topElement->mini){    topElement->mini=value; } //printf("现在栈顶的最小值是:%d\n",topElement->mini); stack->top++;//别忘了把top指针++ printf(" successful\n");}int  minStackPop(struct MinStack *stack){//要修改stack的top的嘛,得改变stack所以要传指针if(stack->top==0){  printf("stack is empty!!!! cannot pop\n");  return 0;}  return stack->data[--stack->top].value;}int minStackMinValue(struct MinStack stack){  if(stack.top==0){    printf("there is no element in this stack\n");    return 0;  }   return stack.data[stack.top-1].mini;}int main(){    int maxSize=10;    int test[]={92,45,23,10,75,38,83,92,10,7};    struct MinStack myStack=initialStack(maxSize);    for(int i=0;i<10;i++){      minStackPush(test[i],&myStack);      printf("current min value in stack is %d\n",minStackMinValue(myStack));      printf("-----------------------------------------------\n");    }    for(int j=0;j<10;j++){      printf("%d is poping from stack\n",minStackPop(&myStack));      printf("-----------------------------------------------\n");    }    return 0;}