【微软100面试题实现】第02题:设计包含min函数的栈
2012-11-08 08:42
302 查看
微软100面试题实现:第02题
题源自:http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
题目:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
实现:
分析:
开始时下面这行语句是
后来改成
所以应该是STACKINCREMENT不能在remalloc函数中出现,导致出错,但为什么#define 常量不能在函数参数中使用呢?。。。
题源自:http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
题目:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
实现:
/* *【samu 2012-11-08】v0.1 * 设计一个含min函数的栈 */ #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define STACK_INIT_SIZE 100; //存储空间初始分配量 #define STACKINCREMENT 10; //存储空间分配增量 #define MAX_INT 100000000; //栈的结构 typedef struct{ int *base; //栈的基指针 int *top; //栈的头指针 int stacksize; //栈的容量值 }Stack; int initStack(Stack &s) //栈的初始化 { //构造一个空栈S s.stacksize = STACK_INIT_SIZE; s.base = (int*) malloc (s.stacksize*sizeof(int)); if(!s.base){ exit(0); } s.top = s.base; //头指针和基指针相同 return 0; } int pop(Stack &s) //出栈 { if(s.top - s.base == s.stacksize){ printf("出错:栈已空不能出栈\n"); return -1; } int value = *(--s.top); return value; } int push(Stack &s, int value) { if(s.top - s.base >= s.stacksize){ s.stacksize = s.stacksize + STACKINCREMENT; s.base = (int*)realloc(s.base,(s.stacksize)*sizeof(int)); if(!s.base){ printf("错误:push操作时栈满,申请内存空间出错!\n"); return 0; } s.top = s.base+s.stacksize; } *s.top++ = value; return value; } int min(Stack &s) { int min = MAX_INT; int temp = min; while(s.top != s.base){ temp = pop(s); printf("出栈:%d\n",temp); if(min > temp){ min = temp; } } return min; } int main() { int minNumber; int array[7] = {5,7,1,5,6,2,9}; Stack s; initStack(s); //栈的初始化 for(int i = 0; i<7; ++i){ push(s,array[i]); } minNumber = min(s); printf("最小的数为:%d\n",minNumber); return 0; }运行结果:
分析:
开始时下面这行语句是
s.stacksize = s.stacksize + STACKINCREMENT; s.base = (int*)realloc(s.base,(s.stacksize)*sizeof(int));写成
s.base = (int*)realloc(s.base,(s.stacksize +STACKINCREMENT )*sizeof(int)); //出错了但该语句编译时报错了,说语句语法有问题
后来改成
s.base = (int*)realloc(s.base,(s.stacksize +STACKINCREMENT )*sizeof(int)); //正确
所以应该是STACKINCREMENT不能在remalloc函数中出现,导致出错,但为什么#define 常量不能在函数参数中使用呢?。。。
相关文章推荐
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构] - c实现
- 微软等面试100题筛选答案-2-设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈—python实现
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 微软面试100题之二 设计包含min函数的栈。
- [微软面试100题] 设计包含min函数的栈
- [程序员面试题精选100题]2.设计包含min函数的栈
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 程序员面试题精选100题(02)-设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 微软等面试100题第二题:设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 【微软面试100题】2.设计包含min函数的栈
- 微软100题-第2题设计包含min函数的栈
- 微软面试100题系列---设计包含min函数的栈
- 微软面试题2、设计包含min函数的栈
- 2. 微软面试题:设计包含min函数的栈(栈)
- 微软算法100题02 设计包含min函数的栈