标签:des style 使用 os strong io 数据 for
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。
对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。
7 s 3 s 4 s 2 s 1 o o s 0
3 3 2 1 2 3 0
代码:
/* 包含min函数的栈 by Rowandjj 2014/8/2 */ #include<stdio.h> #include<stdlib.h> //-------------栈基本定义及实现-------------------- typedef struct _SNODE_ { int data; struct _SNODE_ *next; }Node,*pNode; typedef struct _STACK_ { pNode pHead; int size; }Stack,*pStack; void InitStack(pStack ps) { ps->pHead = (pNode)malloc(sizeof(Node)); if(ps->pHead == NULL) { exit(-1); } ps->pHead->next = NULL; ps->size = 0; } void Push(pStack ps,int data) { if(ps == NULL) { return; } pNode pNew = (pNode)malloc(sizeof(Node)); if(!pNew) { exit(-1); } pNew->data = data; pNew->next = ps->pHead->next; ps->pHead->next = pNew; ps->size++; } void Pop(pStack ps,int *data) { if(ps == NULL) { *data = -1; return; } pNode pDel = ps->pHead->next; if(pDel == NULL) { *data = -1; return; } *data = pDel->data; ps->pHead->next = pDel->next; free(pDel); ps->size--; } void Destroy(pStack ps) { if(ps == NULL) { return; } pNode p,q; p = ps->pHead; while(p != NULL) { q = p->next; free(p); p = q; } ps->size = 0; ps = NULL; } bool Top(pStack ps,int *data) { if(ps == NULL || ps->size == 0) { *data = -1; return false; } else { *data = ps->pHead->next->data; return true; } } //------------------------------------ //ps是数据栈,pMin是辅助栈,用于存储最小值 void StackWithMin_Push(pStack pS,pStack pMin,int data) { /* 1.data压入数据栈 2.当辅助栈为空或者辅助栈栈顶元素小于当前入栈元素data,将data 压入辅助栈,否则继续压入辅助栈栈顶元素 */ if(pS == NULL || pMin == NULL) { return; } Push(pS,data); int top; Top(pMin,&top); if(pMin->size == 0) { Push(pMin,data); } else if(data < top) { Push(pMin,data); } else { Push(pMin,top); } } void StackWithMin_Pop(pStack pS,pStack pMin) { /* 分别在两个栈中弹出栈顶元素 */ if(pS == NULL || pMin == NULL || pS->size <= 0 || pMin->size <= 0) { return ; } int data,temp; Pop(pS,&data); Pop(pMin,&temp); } //输出最小值 bool StackWithMin_Min(pStack pS,pStack pMin,int *min) { /* 辅助栈栈顶即为最小元素 */ if(pS == NULL || pMin == NULL || pS->size <= 0 || pMin->size <= 0) { return false; } Top(pMin,min); return true; } int main() { Stack s,minS; InitStack(&s); InitStack(&minS); int n; while(scanf("%d",&n) != EOF) { if(n <= 0) { continue; } for(int i = 0; i < n; i++) { int data; while(getchar() != '\n') continue; char c; scanf("%c",&c); if(c == 's') { scanf("%d",&data); StackWithMin_Push(&s,&minS,data); int min; if(StackWithMin_Min(&s,&minS,&min)) { printf("%d\n",min); }else { printf("NULL\n"); } }else if(c == 'o') { StackWithMin_Pop(&s,&minS); int min; if(StackWithMin_Min(&s,&minS,&min)) { printf("%d\n",min); }else { printf("NULL\n"); } } } } Destroy(&s); Destroy(&minS); return 0; }
标签:des style 使用 os strong io 数据 for
原文地址:http://blog.csdn.net/chdjj/article/details/38348569