【练习】设计包含min 函数的栈
2011-10-17 10:27
323 查看
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
思路:在栈结点中增加一个指向当前栈最小值的指针。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
思路:在栈结点中增加一个指向当前栈最小值的指针。
#include <iostream> #include <time.h> using namespace std; struct StackNode { int value; StackNode *pNext; StackNode *pMin; } ; typedef struct{ StackNode *top; //栈顶指针 }LinkStack; void InitStack(LinkStack *S) { S->top=NULL; } void push(LinkStack *S,int element); int pop(LinkStack *S); void Min(LinkStack *S); void printStack(LinkStack *S); int main() { LinkStack *s=new LinkStack(); InitStack(s); srand((unsigned)time(NULL)); for (int i=0;i<10;i++) { push(s,rand()%20); } Min(s); while(s->top!=NULL) { pop(s); Min(s); } } void push(LinkStack *S,int x) { if (NULL==S->top)//栈为空时 { StackNode *p=(StackNode *)malloc(sizeof(StackNode)); p->value=x; p->pMin=p; p->pNext=S->top;//将新结点*p插入链栈头部 S->top=p; } else { StackNode *p=(StackNode *)malloc(sizeof(StackNode)); p->value=x; p->pMin=p; /************************************************************************/ /* 使当前结点pMin始终指向当前栈中最小的值 */ if (p->pMin->value<S->top->pMin->value) { p->pMin=p; } else { p->pMin=S->top->pMin; } /************************************************************************/ p->pNext=S->top;//将新结点*p插入链栈头部 S->top=p; } } int pop(LinkStack *S) { int x; StackNode *p=S->top;//保存栈顶指针 x=p->value; //保存栈顶结点数据 S->top=p->pNext; //将栈顶结点从链上摘下 free(p); cout<<"pops "<<x<<endl; return x; } void Min(LinkStack *S) { printStack(S); if (NULL!=S->top) { cout<<"current min value is:"<<S->top->pMin->value; } else { cout<<"stack empty"<<endl; } cout<<endl; cout<<endl; } void printStack(LinkStack *S) { if (S->top!=NULL) { cout<<"current stack is:"<<" "; StackNode *p=S->top; while(NULL!=S->top) { cout<<S->top->value<<" "; S->top=S->top->pNext; } S->top=p; cout<<endl; } else { cout<<"stack empty"<<endl; } }
相关文章推荐
- 设计包含 min 函数的栈
- 2.设计包含min 函数的栈
- 设计包含 min 函数的栈(栈) java语言实现
- (微软100题)2.设计包含min 函数的栈。
- MS - 2 - 设计包含 min 函数的栈
- 设计包含 min 函数的栈
- 笔试题:设计包含min 函数的栈
- 2.设计包含min 函数的栈。
- 设计包含min 函数的栈(push\pop\min)
- 【微软100题】002设计包含 min 函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 设计包含min()函数的栈
- 微软面试100题系列-设计包含 min 函数的栈
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 请设计一个队列FIFO,要求包含min max mid函数
- 2.设计包含min 函数的栈。
- 【100题】设计包含min 函数的栈
- 设计包含min 函数的栈(程序分析)
- 【编程题目】设计包含 min 函数的栈
- No2、设计包含 min 函数的栈(栈)