线性表
线性表
栈
括号序列
`
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
char a[300]={0},c[300]={0};
int d[300]={0};
int top=0,n=0,f=0;
for(int i=0;i<s.size();i++)
{
//用栈储存左括号,数组储存左括号的位置
if(s[i]=='(')
{
top++;
a[top]='(';
d[top]=i+1+f;
n++;
c[n]='(';
}
else if(s[i]=='[')
{
top++;
a[top]='[';
d[top]=i+1+f;
n++;
c[n]='[';
}
//读取右括号
else if(s[i]==')')
{
//能够匹配
if(a[top]=='(')
{
++n;
c[n]=')';
a[top]=0;//将左括号弹出
top--;
}
//不能:补齐左括号
else
{
++n;
c[n]='(';
++n;
c[n]=')';
f++;//左括号在c中相对a的位置向后挪了一位
}
}
else if(s[i]==']')
{
if(a[top]=='[')
{
++n;
c[n]=']';
a[top]=0;
top--;
}
else
{
++n;
c[n]='[';
++n;
c[n]=']';
f++;
}
}
}
//输出+补齐未匹配的左括号
for(int i=1;i<=n;i++)
{
cout<<c[i];
for(int j=1;j<=top;j++)//遍历未匹配的左括号
{
if(d[j]==i)
{
if(a[j]=='(')
cout<<')';
else if(a[j]=='[')
cout<<']';
break;//补齐后跳出循环
}
}
}
return 0;
}
`
后缀表达式
#include<iostream>
using namespace std;
//四则运算
int jud(int a,int b,char c)
{
if(c=='-')
return a-b;
else if(c=='+')
return a+b;
else if(c=='*')
return a*b;
else
return a/b;
}
int main()
{
char a,b[100];
long long c[100005]={0};
int m=1;
cin>>a;
//读取数字
while(a!= '@')
{
b[m]=a;
m++;
cin>>a;
}
//判断
int flag=1,k=1;
for(int i=1;i<=m;i++)
{
//考虑到用char数组无法储存多位数 用int数组储存 相当于入栈
//利用flag
if(b[i]!='.'&&b[i]>='0'&&b[i]<='9')
{
b[i]-=48;
c[k]=c[k]*10+b[i];
flag=0;
}
else if(b[i]=='.'&&flag==0)
{
k++;
flag=1;//更新flag
}
//计算规则:靠近两个数优先进行运算靠近他的运算
//赋值给栈顶下一个数并且弹出栈顶
else if(b[i]=='+'||b[i]=='-'||b[i]=='*'||b[i]=='/')
{
c[k-2]=jud(c[k-2],c[k-1],b[i]);//计算
c[k-1]=0;
k--;
}
}
cout<<c[1];
return 0;
}
链表
队列安排
`
#include<iostream>
using namespace std;
int k,p;
struct node{
int l,r,d;
}a[100005]={0};
void add(int k,int i,int p)
{
//把i插在k的左边
if(p==0)
{
a[i].r=k;
a[k].l=i;
a[i].l=a[k].l;
a[a[i].l].r=i;
}
//把i插在k的右边
else
{
a[i].r=a[k].r;
a[i].l=k;
a[k].r=i;
a[a[i].r].l=i;
}
}
int main()
{
int n;
cin>>n;
//设置端点
a[0].r=0,a[0].l=0;
add(0,1,1);
for(int i=2;i<=n;i++)
{
cin>>k>>p;
add(k,i,p);
}
int m,x;
cin>>m;
//删除元素
while(m--)
{
cin>>x;
a[x].d=1;
}
//输出
for(int i=a[0].r; i ; i=a[i].r)
{
if(a[i].d==0)
{
cout<<i<<" ";
}
}
return 0;
}
}
`
map
寄包柜
#include<bits/stdc++.h>
using namespace std;
//【柜子->【格子->物品(一对一)】(一对多)】
//map<柜子,<格子,物品> >
//便于读取
map<int,map<int,int>>a;//嵌套的map
int main()
{
int n,q;
cin>>n>>q;
for(int l=1;l<=q;l++)
{
int b;
cin>>b;
if(b==1)
{
int i,j,k;
cin>>i>>j>>k;
a[i][j]=k;
}
else if(b==2)
{
int i,j;
cin>>i>>j;
cout<<a[i][j]<<endl;
}
}
return 0;
}