CCI_Q3.2

本文参考该作者文章当作编程笔记:

作者:Hawstein
出处:http://hawstein.com/posts/ctci-solutions-contents.html

Q:

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。

思路:

额外建立一个保存栈中目前最小值的数组gpStacMin[],如果入栈的数据小于等于gpStacMin中的栈顶数据,同时入栈。弹出时候,只要弹出的栈顶元素和gpStacMin中的栈顶数据相等,同时弹出。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 10
 4 int *gpStac,*gpStacMin;
 5 int gCoutStac=-1,gCoutStacMin=-1;
 6 void initStack()
 7 {
 8     gpStac=(int *)malloc(sizeof(int)*N);
 9     gpStacMin=(int *)malloc(sizeof(int)*N);
10 }
11 void stackPush(int num)
12 {
13     gpStac[++gCoutStac]=num;
14     if(gCoutStacMin==-1)
15         gpStacMin[++gCoutStacMin]=num;
16     else if(num<=gpStacMin[gCoutStacMin])
17             gpStacMin[++gCoutStacMin]=num;
18 }
19 int stackPop()
20 {
21     if(gpStac[gCoutStac]==gpStacMin[gCoutStacMin])
22         --gCoutStacMin;
23     return gpStac[gCoutStac--];
24 }
25 int stackMin()
26 {
27     return gpStacMin[gCoutStacMin];
28 }
29 int main()
30 {
31     initStack();
32     int i;
33     stackPush(3);
34     stackPush(2);
35     stackPush(1);
36     stackPush(4);
37     stackPush(2);
38     stackPush(1);
39     stackPush(3);
40     for(i=0;i<N-3;i++)
41     {
42         printf("%d\t",stackMin());
43         stackPop();
44     }
45     free(gpStac);
46     free(gpStacMin);
47     return 0;
48 }

 

posted @ 2014-03-11 09:17  哈士奇.银桑  阅读(142)  评论(0编辑  收藏  举报