题解 | #包含min函数的栈#

包含min函数的栈

http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

比较笨的C模拟


#define Ele int
#define MAX 100000

struct Stack {
    Ele Top;
    struct Stack* Next;
};
typedef struct Stack Stack;
static Stack *Sta;
static Stack *M;

Stack* CreateStack(Ele item) {
    Stack* S;
    S = (Stack*)malloc(sizeof(Stack));
    if (S == NULL)
    {
        printf("内存错误");
        return NULL;
    }
    S->Next = NULL;
    S->Top = item;
    return S;
}




void Push(Ele item, Stack* S)
{
    if(!Sta)
    {
        Sta = (Stack*)malloc(sizeof(Stack));
        Sta->Next=NULL;
    }
        
    if(!M)
    {
        M = (Stack*)malloc(sizeof(Stack));
        M->Next=NULL;
        M->Top =MAX;
    }
    
    Stack* tem = (Stack*)malloc(sizeof(Stack));
    tem->Next = S->Next;
    tem->Top = item;
    S->Next = tem;
}

int Top(Stack* S)
{
    if(!Sta)
    {
        Sta = (Stack*)malloc(sizeof(Stack));
        Sta->Next=NULL;
    }
        
    if(!M)
    {
        M = (Stack*)malloc(sizeof(Stack));
        M->Next=NULL;
        M->Top =MAX;
    }
    if(S->Next==NULL)
        return MAX;
    return (S->Next->Top);
}

int IsEmpty(Stack* S)
{
    return (S->Next == NULL);
}


int Pop(Stack* S) /*栈顶元素出栈*/
{
    Stack* p;
    Ele tmp;
    if (IsEmpty(S)) {
        printf("Pop an empty stack!\n");
        return -1;
    }
    else {
        p = S->Next;
        S->Next = p->Next;
        tmp = p->Top;
        free(p);
        return tmp;
    }
}

void push(int value ) {
    int tmp;
    if(!Sta)
    {
        Sta = (Stack*)malloc(sizeof(Stack));
        Sta->Next=NULL;
    }
        
    if(!M)
    {
        M = (Stack*)malloc(sizeof(Stack));
        M->Next=NULL;
        M->Top =MAX;
    }
    Push(value, Sta);
    tmp=Top(M);
    if(value<tmp)
        Push(value, M);
    else
        Push(tmp, M);
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return 无
 */
void pop() {
    Pop(Sta);
    Pop(M);
    
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return int整型
 */
int top() {
    // write code here
    return Top(Sta);
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return int整型
 */
int min() {
    // write code here
    return Top(M);
}
全部评论

相关推荐

牛客722552937号:新锐之星有点坑爹,特别是对男的
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务