写在前面
一些题目涉及到多种解法,我会尽量用多种方法解决,如果还有别的方法,欢迎交流,对于一些使用STl的题目,我会先更新使用STL的代码,然后会尽力不使用STL再做一遍,由于时间关系有的题目思路可能写的比较简单
7-1 jmu-ds-顺序表区间元素删除 (15 分)
若一个线性表L采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
输入格式:
三行数据,第一行是顺序表的元素个数,第二行是顺序表的元素,第三行是x和y。
输出格式:
删除元素值在[x,y]之间的所有元素后的顺序表。
输入样例:
10
5 1 9 10 67 12 8 33 6 2
3 10
输出样例:
1 67 12 33 2
#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
int num[n];
for(int i=0;i<n;i++)
cin>>num[i];
int l,r;
cin>>l>>r;
bool flag=false;
for(int i=0;i<n;i++){
if(num[i]>r||num[i]<l){
if(!flag){
cout<<num[i];
flag=true;
}
else
cout<<" "<<num[i];
}
}
}
7-2 两个有序链表序列的合并 (20 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iomanip>
using namespace std;
struct node
{
int num;
struct node *next;
};
node creatList()
{
node *head,*r,*p;
int k;
head = (node*)malloc(sizeof(node));
cin>>k;
head->next=nullptr;
if(k==-1)
return *head;
while(k!=-1)
{
p=(node*)malloc(sizeof(node));
p->num=k;
p->next==nullptr;
if(head->next==nullptr)
head->next=p;
else
r->next=p;
r=p;
cin>>k;
}
r->next=nullptr;
return *head;
}
void mergeList(node l1,node l2)
{
node *head,*a,*b,*c;
head = (node*)malloc(sizeof(node));
head->next=nullptr;
b=l1.next;
c=l2.next;
while(b!=nullptr&&c!=nullptr)
{
if(b!=nullptr&&c!=nullptr)
{
if(b->num>c->num)
{
if(head->next==nullptr)
head->next=c;
else
a->next=c;