沈师PTA数据结构第2章实验题集1—顺序表操作

顺序表的建立及遍历 (20 分)

读入n值及n个整数,建立顺序表并遍历输出。

输入格式:

读入n及n个整数

输出格式:

输出n个整数,以空格分隔(最后一个数的后面没有空格)。

输入样例:

在这里给出一组输入。例如:

4
-3 10 20 78
结尾无空行

输出样例:

在这里给出相应的输出。例如:

-3 10 20 78
结尾无空行
#include <stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    int b[a];
    for(int i=0;i<a;i++){
        scanf("%d",&b[i]);
    }
     for(int i=0;i<a;i++){
         if(i!=a-1){
             printf("%d ",b[i]);
         }else{
             printf("%d",b[i]);
         }

    }
    printf("\n");
    return 0;
}

jmu-ds-顺序表区间元素删除 (20 分)

若一个线性表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<stdio.h>
int main(){
    int a[10000];
    int x,y,i,t,n;
    int flag=1;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d%d",&x,&y);
    for (i=0;i<n;i++){
        if(flag){
            if(a[i]<x||a[i]>y){
                printf("%d",a[i]);
                flag=0;
            }
        }
        else{
            if(a[i]<x||a[i]>y)
                printf(" %d",a[i]);
        }
    }
    return 0;
}

数组循环左移 (20 分)

本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1⋯a**n−1)变换为(a**ma**n−1a0a1⋯a**m−1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

8 3
1 2 3 4 5 6 7 8
结尾无空行

输出样例:

4 5 6 7 8 1 2 3
结尾无空行
#include<stdio.h> 
int main(){
	int m,n;
	int arr[100];
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	}
	for(int i=0;i<m;i++){
		int temp = arr[0];
		for(int j=1;j<n;j++){
			arr[j-1] = arr[j];
		}
		arr[n-1] = temp;
	}
	for(int i=0;i<n;i++){
		if(i == n-1){
			printf("%d",arr[i]);
		}
		else{
			printf("%d ",arr[i]);
		}
	}
	return 0;
}

jmu-ds-简单密码 (20 分)

Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。

密文 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

明文 V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

你的任务是对给定的密文进行解密得到明文。 你需要注意的是,密文中出现的字母都是大写 字母。密文中也包括非字母的字符,对这些字符不用进行解码。

输入格式:

输入一行密文字符串,可包含空格。

输出格式:

输出明文字符串。输入明文字符串为空时,输出“NULL”

输入样例:

AB 12aC dab EF
结尾无空行

输出样例:

VW 12aX dab ZA
结尾无空行
copy自网上的一个c++写法,目前看不懂,但是能得分
#include <iostream>
#include<string>
using namespace std;
 
int main()
{
    string str1,str2;
    getline(cin,str1);
    if(str1.size()==0)
    {
        cout<<"NULL";
        return 0;
    }
    for(int i = 0;i<str1.size();i++)
    {
       if(str1[i]>='A' && str1[i]<='E')
       {
           str1[i] = str1[i] + 21;
       }
       else if(str1[i]>='F' && str1[i] <= 'Z')
       {
           str1[i] = str1[i] - 5;
       }
    }
    cout << str1;
    return 0;
}
自己思考的C语音写法在输入为空的时候判断错误,copy了网上的一个C++写法。
#include<stdio.h>
#include<string.h>
int main(){
	char s[26];
	while(fgets(s,26,stdin)){       //接收START 
		if(strcmp(s,"ENDOFINPUT")==0)
			break;
		fgets(s,201,stdin);       //接收密文
		int i,len=strlen(s);
		for(i=0;i<len;i++){
			if(s[i]>='A'&&s[i]<='Z'){
				s[i]=(s[i]-'A'-5+26)%26+'A';   //核心算法,向左平移5个
			}
			printf("%c",s[i]);
		} 
		//printf(""); 
		fgets(s,201,stdin);     //接收END 
	}
	return 0;
}

R7-5 递增有序顺序表的插入 (20 分)

实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。。

输入格式:

第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。

输出格式:

对每一组输入,在一行中输出插入X后的递增的顺序表。

输入样例:

在这里给出一组输入。例如:

5
1 3 5 7 9
6结尾无空行

输出样例:

在这里给出相应的输出。例如:

1,3,5,6,7,9,
结尾无空行
#include <stdio.h>
int main(){
	int dz[200];
	int a,b,i,j;
	scanf("%d",&a);
	for(i=0;i<a;i++)
		scanf("%d",&dz[i]);
	scanf("%d",&b);
	dz[a]=b;
	for(i=a;i>0;i--){		
		if(dz[i]<dz[i-1]){
			j=dz[i];
			dz[i]=dz[i-1];
			dz[i-1]=j;
		}
    }
	for(i=0;i<a+1;i++)
		printf("%d,",dz[i]);	
	return 0;
}

posted @ 2021-10-14 23:18  Xinfei_Eva™  阅读(291)  评论(0编辑  收藏  举报