数据结构线性表习题集-3

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 
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 
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";
}

你可能感兴趣的:(PTA习题复习)