NOJ1004线性表操作

来源:互联网 发布:简述数据库的隔离级别 编辑:程序博客网 时间:2024/04/29 23:19
/*线性表操作时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 3107            测试通过 : 661 描述线性表是n个元素的有序集合(n30),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次存储线性表中元素,采用这种存储方式的线性表称为顺序表。请在顺序表上实现运算,实现顺序表的逆置,删除表中所有元素值等于x的元素。输入三组数据,顺序表元素类型分别为整型、字符型和实型。每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。输出三组数据,每一组第一行为逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素样例输入81 2 3 7 5 6 7 8 73a c mh41.2 3.4 5.6 7.81.2样例输出8 7 6 5 7 3 2 1 8 6 5 3 2 1 m c a m c a 7.8 5.6 3.4 1.2 7.8 5.6 3.4 提示该题属于南京邮电大学《数据结构A》实验一中的内容,验证的是课本代码,每一个输出元素后均有一个空格(包括最后一个元素),请慎重解答。题目来源CHENZ*/#include<stdio.h>#include<string.h>void opp(char a[],int i,int n);void OPP(char a[],char b[],int i,int n,int I);const int N = 5000;int main(){    int i=0,n,I=0,P=3;    char a[N],b[100],ch;        while(P--)            {scanf("%d",&n);        i=0,I=0;        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        getchar();        while((ch=getchar())!='\n')a[i++]=ch;       do    if(a[i-1]==' ') a[--i]=0;    while(a[i-1]==' ');                i--;        //printf("%c",*(i+a));        opp(a,i,n);        while((ch=getchar())!='\n')        b[I++]=ch;        OPP(a,b,i,n,I);    }    return 0;}void opp(char a[],int i,int n){    char*p=a+i;    char*temp=p;    int j,first=1;    while(n--)    {        //temp=p;        for(j=0;;)        {            j++;            if(temp==a||*(--temp)==' ')break;        }        if(first)         {            first=0;            for(;j>=1;j--)            printf("%c",*(p-j+1));                    }        else for(;j>=0;j--)                printf("%c",*(p-j));        p=(--temp);            }    printf(" ");    //printf("*");    printf("\n");}void OPP(char a[],char b[],int i,int n,int I){    char*p=a+i;    char*temp=p;    int j,first=1,o=0,J,NP,ok=1;    while(n--)    {                //temp=p;        o=0;        //printf("%d",b[1]);        for(j=0;;)        {            j++;            if(temp==a||*(--temp)==' ')break;        }        J=j;        NP=0;        //printf("%d%d!",I,J);                while(J--)            {                        if(j!=I||*(p-J)!=b[o++]){NP=1;break;}                        }            //printf("%d!",NP);         //printf("%d",NP);                if(NP==1)        {                    if(first)         {            first=0;            for(;j>=1;j--)            printf("%c",*(p-j+1));            //printf("");        }                else if(ok==1)            for(;j>=0;j--)                printf("%c",*(p-j));        else if(ok==0)        {            for(;j>=1;j--)                printf("%c",*(p-j+1));            //    printf("*");                ok=1;        }                    p=(--temp);        }        else if(NP==0)        {            if(first)             first=0,ok=0;            //printf("ok=%d",ok);                    p=(--temp);        }    }    printf(" ");    //printf("*");        printf("\n");}//WA了,不知道为什么,测了很多很多数据怀疑是NOJ数据有问题。。有输入数据末空格之类的情况,写这么麻烦是,试图用getchar读浮点型,整型,char型,一步到位,练练能力。。的确写了4个小时。//没救了,noj样例输入第二行多了一个空格。。。 结果注意到了这点我也无法保证其他数据的坑。。。反正还是wa在test 1 了。 

0 0
原创粉丝点击