队列queue和栈stack(数据结构)

找到光标,在它的左右两边分别用stack和queue即可,最后输出的时候记得用vector来存储并反转 ,还有注意stack用的是.top(),queue用的是.front()。出栈和出列都为.pop()

using namespace std;
#define int  long long
const int N=2e5+10,M=100;
signed  main()
{
	int n,m;
	int k;
	char s[N];
	string sen;
	cin>>n>>k;
	stack<char>q;
	queue<char>w;
	int cnt;
	bool st=false;
	for(int i=0;i<n;i++)
	{
		cin>>s[i];
		if(s[i]=='I')
		{st=true;continue;}
		if(st!=true)
			q.push(s[i]);
		else w.push(s[i]);
	}
	for(int i=1;i<=k;i++)
	{
		cin>>sen;
		if(sen=="backspace")
		{
			if(q.empty())continue;
			else if(q.top()=='('&&w.front()==')')
			{
				q.pop(),w.pop();
			}
			else if(!q.empty())
			{
				q.pop();
			}
		
		}
		else if(sen=="delete")
		{
            if(w.empty())continue;
            else if(!w.empty())
			{
				w.pop();
			}
		}
		
		
	}
	vector<char> temp;
	while(!q.empty())
	{
		temp.push_back(q.top());
		q.pop();
	}
	
	
	for(int i = temp.size() - 1; i >= 0; i--)
	{
		cout << temp[i];
	}
	cout<<'I';
	while(!w.empty())
	{
		cout<<w.front();
		w.pop();
	}
	return 0;
	
}