本文主要是介绍pat Stack(1057),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1057. Stack (30)
Stack is one of the most fundamental data structures, which is based on the principle of Last In First Out (LIFO). The basic operations include Push (inserting an element onto the top position) and Pop (deleting the top element). Now you are supposed to implement a stack with an extra operation: PeekMedian -- return the median value of all the elements in the stack. With N elements, the median value is defined to be the (N/2)-th smallest element if N is even, or ((N+1)/2)-th if N is odd.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<= 105). Then N lines follow, each contains a command in one of the following 3 formats:
Push keyPop
PeekMedian
where key is a positive integer no more than 105.
Output Specification:
For each Push command, insert key into the stack and output nothing. For each Pop or PeekMedian command, print in a line the corresponding returned value. If the command is invalid, print "Invalid" instead.
Sample Input:17 Pop PeekMedian Push 3 PeekMedian Push 2 PeekMedian Push 1 PeekMedian Pop Pop Push 5 Push 4 PeekMedian Pop Pop Pop PopSample Output:
Invalid Invalid 3 2 2 1 2 4 4 5 3 Invalid
//1057 stack //错误的代码 #include <stdio.h> #include <string.h> #include <stack> #include <vector> #include <algorithm> using namespace std;int main() {int n, i, j;char str[15];stack<int> S;vector<int> V;scanf("%d", &n);//while(scanf("%d", &n) != EOF)//{getchar();while(!S.empty())S.pop();V.clear();for(i = 0; i < n; i++){gets(str);if(strcmp(str, "Pop") == 0){if(S.empty()){printf("Invalid\n");}else if(!S.empty()){printf("%d\n", S.top());V.pop_back();//不应该是V.Pop_back(), 而应该是把S.top()从vector中删除,而不是把vector中最后一个元素删除。S.pop();}}else if(strcmp(str, "PeekMedian") == 0){if(S.empty())printf("Invalid\n");else if(!S.empty()){int m;if(S.size() % 2 == 0)m = S.size() / 2;elsem = (S.size() + 1) / 2;sort(V.begin(), V.end());/*用这种方法虽然过了一个测试数据,但是方法本身不对。例如6Push 3Push 2Push 1PeekMedianPopPeekMedian便得不到正确的结果。因为用sort对vector进行了排序,*/printf("%d\n", V[m-1]);}}else if(str[1] == 'u'){int tmp = 0;for(j = 0; j < strlen(str); j++)if(str[j] >= '0' && str[j] <= '9')tmp = tmp * 10 + str[j] - '0';S.push(tmp);V.push_back(tmp);}}//}return 0; }
这篇关于pat Stack(1057)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!