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
c++
#include <iostream>
using namespace std;
const int maxn = 10000;
int A[maxn];
int B[maxn];
void Merg(int A[],int B[],int beg,int end)
{
int i= 0;
int j= 0;
int k= 0;
int c[maxn];
while (i<beg&&j<end)
{
if(A[i]<B[j])
c[k++] = A[i++];
else
c[k++] = B[j++];
}
while (i<beg) c[k++] = A[i++];
while (j<end) c[k++] = B[j++];
for (int t = 0,i=0; t <k ; ++t) {
A[t] = c[i++];
}
}
int main()
{
int i=0;
int j=0;
int n,m;
cin>>n;
while(n!=-1)
{
A[i] = n;
cin>>n;
i+=1;
}
cin>>m;
while(m!=-1)
{
B[j] = m;
cin>>m;
j+=1;
}
Merg(A,B,i,j);
for(int k=0; k<i+j; k++)
cout<<A[k]<<" ";
}
7-3 回文判断 (20 分)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。
输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。
输入样例:
abdba
输出样例:
YES
算法分析:
该题目仅需要:栈的入栈和出栈操作,便于实现
#include <iostream>
using namespace std;
const int maxn= 20+5;
char str[maxn];
struct Stack{
char elem[maxn];
int top;
}s;
void push(char c)
{
s.elem[++s.top] = c;
}
char pop()
{
return s.elem[s.top--];
}
int main()
{
char c;
int j=0;
while((c=getchar())!='\n')
{
str[j] = c;
push(c);
j++;
}
int flag = 0;
for (int i = 0; i <j ; ++i) {
if(str[i]==pop())
continue;
else
{
flag = 1;
break;
}
}
if(flag == 1)
cout<<"NO";
else
cout<<"YES";
}