
手撕栈的模板
#include <bits/stdc++.h>
using namespace std;
int arr[1000];
int top;//顶
bool empty() {
return top==0;
}
void push(int x) {
arr[++top]=x;
}
int getTop() {
return arr[top];
}
void pop() {
top--;
}
int size() {
return top;
}
int main() {
push(9);
push(37);
cout<<getTop()<<endl;
pop();
cout<<getTop()<<endl;
return 0;
}
栈的模板(标准)
#include <bits/stdc++.h>
using namespace std;
int main() {
stack<int> stk1,stk2;
stk1.push(1);//入栈
stk1.empty();//栈空
stk1.pop();//出栈
stk1.size();//返回栈的元素个数
stk1.top();//返回栈顶元素
return 0;
}
手搓冒泡排序
#include <bits/stdc++.h>
using namespace std;
int n,arr[10009],x;
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>arr[i];
}
for(int i=1; i<=n-1; i++) {
for(int j=2; j<=n; j++) {
if(arr[j]>arr[j-1]) {
swap(arr[j],arr[j-1]);
}
}
}
for(int i=1; i<=n; i++) {
cout<<arr[i]<<' ';
}
return 0;
}
结构体排序
#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
int a,b,c,num;
};
node arr[50009];
bool cmp(node a,node b) {
if(a.c !=b.c ) {
return a.c>b.c;
}
return a.a<b.a;
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>arr[i].a>>arr[i].b;
arr[i].c =(arr[i].a+arr[i].b)*2;
arr[i].num =i;
}
sort(arr+1,arr+n+1,cmp);
for(int i=1; i<=n; i++) {
cout<<arr[i].num<<' ';
}
return 0;
}
队列模板
#include <bits/stdc++.h>
#include <queue>
using namespace std;
int main() {
que.push(1);//入队
que.pop();//出队
que.front();//队头
que.back(); //队尾
que.size();//元素个数
que.empty();//队空
return 0;
}
高精度模板
#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int arr[9999],brr[9999],crr[9999];
int main() {
cin>>s1>>s2;
int lena=s1.size();
for(int i=0; i<lena; i++) {
arr[i]=s1[lena-1-i]-'0';
}
int lenb=s2.size();
for(int i=0; i<lenb; i++) {
brr[i]=s2[lenb-1-i]-'0';
}
int jw=0,sum=0;
int lenc=max(lena,lenb);
for(int i=0; i<lenc; i++) {
sum=arr[i]+brr[i]+jw;
crr[i]=sum%10;
jw=sum/10;
}
if(jw>0){
crr[lenc]=1;
lenc++;
}
for(int i=lenc-1; i>=0; i--) {
cout<<crr[i];
}
return 0;
}
A+B-C Problem(高精度)
#include <iostream>
#include <cstring>
using namespace std;
int c[10001]={},s[10020],jf;
int a[50000],b[50000],a2[10020]={},b2[10020]={};
char a1[50001]={},b1[10001]={},c1[10001]={},d1[10001]={},d[10020]={};
void jiafa(char a1[],char b1[]){
int lena=strlen(a1);
int lenb=strlen(b1);
for(int i=0;i<lena;i++) a[i]=a1[lena-i-1]-'0';
for(int i=0;i<lenb;i++) b[i]=b1[lenb-i-1]-'0';
int lenc=max(lena,lenb);
for(int i=0;i<lenc;i++)
{
c[i]+=a[i]+b[i];
if(c[i]>9)
{
c[i+1]++;
c[i]=c[i]%10;
}
}
if(c[lenc]==1){
for(int i=lenc;i>=0;i--){
d1[jf++]=char(c[i]+48);
}
}else{
for(int i=lenc-1;i>=0;i--){
d1[jf++]=char(c[i]+48);
}
}
}
void jian(char d1[],char c1[]){
int lena=strlen(d1);
int lenb=strlen(c1);
if(lena<lenb || (lena==lenb && strcmp(d1,c1)<0))
{
strcpy(d,c1);
strcpy(c1,d1);
strcpy(d1,d);
cout<<"-";
lena=strlen(d1);
lenb=strlen(c1);
}
for(int i=0;i<lena;i++) a2[i]=d1[lena-i-1]-'0';
for(int i=0;i<lenb;i++) b2[i]=c1[lenb-i-1]-'0';
for(int i=0;i<lena;i++)
{
s[i]=a2[i]-b2[i]-s[i];
if(s[i]<0)
{
s[i+1]++;
s[i]+=10;
}
}
int t=lena-1;
while(s[t]==0 && t>0)
{
t--;
}
for(int i=t;i>=0;i--) cout<<s[i];
}
int main()
{
cin>>a1>>b1>>c1;
jiafa(a1,b1);
jian(d1,c1);
return 0;
}
A*B Problem
#include <bits/stdc++.h>
using namespace std;
char s1[1009],s2[1009];
int arr[1009],brr[1009],crr[20000000];
int main() {
cin>>s1>>s2;
int len1=strlen(s1);
int len2=strlen(s2);
if(s1[0]=='0'||s2[0]=='0'){
cout<<"0";
return 0;
}
for(int i=len1-1; i>=0; i--) {
arr[len1-i-1]=s1[i] - '0';
}
for(int i=len2-1; i>=0; i--) {
brr[len2-i-1]=s2[i] - '0';
}
for(int i=0; i<len1; i++) {
for(int j=0; j<len2; j++) {
crr[i+j]+=arr[i]*brr[j];
crr[i+j+1]+=crr[i+j]/10;
crr[i+j]=crr[i+j]%10;
}
}
int t=len1+len2;
while(crr[t]==0) {
t--;
}
for(int i=t; i>=0; i--) {
cout<<crr[i];
}
return 0;
}