1 两个有序链表序列的合并
#include<bits/stdc++.h>
using namespace std;
int main()
{
list<int> l1,l2;
int n,m;
//cin
while(cin>>n)//读入第一行
{
if(n==-1) break;
else
{
l1.push_back(n);
}
}
while(cin>>m)//读入第二行
{
if(m==-1) break;
else
{
l2.push_back(m);
}
}
//solve
l1.merge(l2);//合并
//cout
list<int>::iterator it;//定义迭代器
if(!l1.empty())//先判断是不是空的
{
for(it=l1.begin();it!=l1.end();it++)
{
if(it==l1.begin())
cout<<*it;
else
cout<<" "<<*it;
}
}
else cout<<"NULL";
cout<<endl;
return 0;
}
2 顺序表的建立及遍历
#include<bits/stdc++.h>
using namespace std;
int main()
{
list<int> l;
int n,x;
cin>>n;
//cin
while(n--)
{
cin>>x;
l.push_back(x);
}
list<int>::iterator it;//定义迭代器
//cout
for(it=l.begin();it!=l.end();it++)
{
if(it==l.begin()) cout<<*it;
else
cout<<" "<<*it;
}
return 0;
}
3 顺序表(删除)
#include <bits/stdc++.h>
using namespace std;
int main()
{
list<int> l;
int n, a, y, x;
//cin
cin >> n;
while (n--)
{
cin >> a;
l.push_back(a);
}
cin >> x >> y;
//solve
list<int>::iterator it;//迭代器
for (it = l.begin(); it != l.end(); )
{
if (*it >= x && *it <= y)
{//删除后会自动返回迭代器+1位置,所以用it承接即可
it = l.erase(it);
}
else it++;
}
//cout
for (it = l.begin(); it != l.end(); it++)
{
if (it == l.begin()) cout << *it;
else cout << " " << *it;
}
return 0;
}
4 最大子列和问题
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, a, max = 0, sum = 0;
cin >> n;
for(int i=0;i<n;i++)
{
cin>>a;
sum += a;
//把每个数都放入sum,每次放入都和max作比较
//如果小于max则代表当前放入的数为负数
//根据题意“如果序列中所有整数皆为负数,则输出0。”
//直接将sum归零,重新遍历后方数据
if (sum > max)
{
max = sum;
}
else if (sum < 0)
{
sum = 0;
}
}
cout << max;
return 0;
}
5 递增有序顺序表的插入
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> l;
int n, a;
cin >> n;
n += 1;
//cin
while (n--)
{
cin >> a;
l.push_back(a);
}
//solve
l.sort(); //sort排序
//cout
list<int>::iterator it;//迭代器
for (it = l.begin(); it != l.end(); it++)
{
cout << *it << "," ;
}
return 0;
}
6 数组元素逆置
#include <bits/stdc++.h>
using namespace std;
int main()
{
list<int> l;
int n = 10, a;
//cin
while (n--)
{
cin >> a;
l.push_back(a);
}
//cout
list<int>::iterator it;//迭代器
for (it = l.begin(); it != l.end(); it++)//正向输出
{
if (it == l.begin())
cout << *it;
else
cout << "," << *it;
}
cout << "\n";
//solve
//这一步也可以直接从尾部输出到头部
l.reverse();//反转list里面的数据
for (it = l.begin(); it != l.end(); it++)//反向输出
{
if (it == l.begin())
cout << *it;
else
cout << "," << *it;
}
return 0;
}
7 一元多项式的加法
//这个题目的意思是想要求出3x4-5x2+6x-2 与5x20-7x4+3x 的和
#include<iostream>
#include<cstdio>
using namespace std;
typedef struct
{
int x;
int y;
}Node;
typedef struct
{
Node data[100005];
int length;
}SqList;
void init(SqList &a);
void input(SqList &a);
void add(SqList a, SqList b, SqList &c);
void output(SqList a);
int main()
{
SqList a,b,c;//定义三个容器用来存两个加数与和
//初始化
init(a);
init(b);
init(c);
//读入
input(a);
input(b);
//进行加法操作
add(a, b, c);
//输出
output(c);
return 0;
}
void init(SqList &a)
{
a.length=0;
}
void input(SqList &a)
{
cin>>a.length;
for(int i=1; i<=a.length; i++)
cin>>a.data[i].x>>a.data[i].y;
}
void output(SqList a)
{
if(a.data[1].x==0) cout<<"0"<<" "<<"0";
else
for(int i=1; i<=a.length; i++)
{
cout<<a.data[i].x<<" "<<a.data[i].y;
if(i<a.length) cout<<" ";
}
}
void add(SqList a, SqList b, SqList &c)
{
int i=1,j=1,k=1;
while(i<=a.length && j<=b.length)
{
if(a.data[i].y > b.data[j].y)
{//将大的先放入
c.data[k].y=a.data[i].y;
c.data[k].x=a.data[i].x;
i++;
}
else if(a.data[i].y == b.data[j].y)
{//如果两个相等在继续进行判断
if(a.data[i].x + b.data[j].x != 0)
{//相等的情况下相加不为0
c.data[k].x=a.data[i].x + b.data[j].x;
c.data[k].y=a.data[i].y;
i++; j++;
}
else if(a.data[i].x + b.data[j].x == 0)
{//为0,则不做存入处理
i++; j++;
continue;
}
}
else if(a.data[i].y < b.data[j].y)
{//将大的放入
c.data[k].y=b.data[j].y;
c.data[k].x=b.data[j].x;
j++;
}
k++; c.length++;
}
if(i>a.length)//判断有没有遍历完所有数据
while(j<=b.length)
{
c.data[k].x=b.data[j].x;
c.data[k].y=b.data[j].y;
k++; j++; c.length++;
}
else
while(i<=a.length)
{
c.data[k].x=a.data[i].x;
c.data[k].y=a.data[i].y;
k++; i++; c.length++;
}
}
8 数组元素的删除
//这道题可以使用vector容器去做,过程基本一致
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> l;
int n, m, a;
cin >> n;
//cin
while (n--)
{
cin >> a;
l.push_back(a);
}
//solve
cin >> m;
list<int>::iterator it;
while (m--) {
cin >> a;
it = l.begin();
for (int i = 0; i < a - 1; i++)
{
it++;
}
it = l.erase(it);
}
//cout
for (it = l.begin(); it != l.end(); it++) {
if (it == l.begin())
cout << *it;
else
cout << " " << *it;
}
return 0;
}
9 数列循环右移
#include <bits/stdc++.h>
using namespace std;
int main() {
int v1[105];
int n, m, t;
//cin
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> v1[i];
}
//solve
reverse(v1, v1 + n );//全部逆置
t = m % n;//需要右翼 0 1 2 只有这三种
reverse(v1, v1 + t );//前半部分逆置
reverse(v1 + t, v1 + n );//后半部分逆置
//cout
for (int i = 0; i < n; i++)
{
cout << v1[i] << " ";
}
return 0;
}
不懂得可以私信我,随时解答。
程序有错误请私信我,以及时改正。感谢!