数据结构学了堆栈,找了些题做做,都是水题,对栈的应用

3704

#include <iostream>
#include <stack>
#include <memory.h>
using namespace std;

int main()
{
	int count = 0;
	char c[101];
	int totalnum;
	int hold[100];
	stack<char> ST1;
	stack<int> ST2;

	//freopen("C:\\Users\\Haojian\\Desktop\\test.txt", "r", stdin);

	while (cin.getline(c, 101))
	{
		memset(hold, 0, 100*sizeof(int));
		while (!ST1.empty()) ST1.pop();
		while (!ST2.empty()) ST2.pop();

		for (int i = 0; c[i] != '\0'; i++)
		{
			if (c[i] == '(')
			{
				ST1.push(c[i]);
				ST2.push(i+1);
			}
			else
			{
				if (c[i] == ')' && !ST1.empty())
				{
					ST1.pop();
					hold[ST2.top()] = 1;
					hold[i+1] = 1;
					ST2.pop();
				}

			}
		}

		cout << c << endl;
		for (int i = 0; c[i] != '\0'; i++)
		{
			if (c[i] == '(' && !hold[i+1])
				cout << "$";
			else if (c[i] == ')' && !hold[i+1])
				cout << "?";
			else 
				cout << " ";
		}
		cout << endl;
	}


	return 0;
}
 
2929
#include <iostream>
#include <stack>
#include <memory.h>
using namespace std;

int main()
{
	int count = 0;
	char n;
	int totalnum;
	int hold[100];
	stack<char> ST1;
	stack<int> ST2;

	//freopen("C:\\Users\\Haojian\\Desktop\\test.txt", "r", stdin);
	while (cin >> totalnum)
	{
		memset(hold, 0, 100*sizeof(int));
		count  = 0;
		for (int i = 1; i <= totalnum; i++)
		{
			cin >> n;
			if (n == '1')
			{
				ST1.push(n);
				ST2.push(i);
			}
			else
			{
				ST1.pop();
				hold[count++] = ST2.top();
				ST2.pop();
			}
		}

		for (int i = 0; i < count - 1; i++)
			cout << hold[i] << " ";

		cout << hold[count-1] << endl;
	}
	return 0;
}

相关文章: