关于顺序表逆置的编程题,代码出现一些错误,求完整解答。

好树叶 发布于 2014/04/12 16:32
阅读 775
收藏 0

请看这段程序代码,为什么不能成功编译?

求指点更改,谢谢。求详解过程。

题目:

1.  将顺序表逆置,要求用最少的附加空间。

以下为代码:

#include <stdio.h>

#include <malloc.h>

#include <process.h>

 

#define  LIST_INIT_SIZE     100 

#define  LISTINCREMENT    10

 

#define   OK                 1

#define   ERROR                0

#define   OVERFLOW          -2

 

typedef    int    Status;

typedef    int    ElemType;

 

typedef  struct

{    ElemType  *elem;      

     int  length;      

     int  listsize;   

}SqList;

 

//创建空顺序表

Status InitList_Sq( SqList &L )

 {

       L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType));

       if (!L.elem)   

               exit(OVERFLOW);

       L.length = 0;

       L.listsize = LIST_INIT_SIZE;

       return OK;

}

 

//顺序表在第i个元素之前插入e

Status ListInsert_Sq( SqList &L, int i, ElemType e)

{ ElemType *newbase,*q,*p;

   if(i<1 || i>L.length+1)  //插入位置非法

            return ERROR;

 

    if(L.length>=L.listsize)//溢出,动态追加空间

    {  newbase= (ElemType *)realloc(L.elem, (L.listsize+ LISTINCREMENT) *sizeof(ElemType));

        if(!newbase) exit(OVERFLOW);

        L.elem=newbase;

        L.listsize+=LISTINCREMENT;

    }

    q=&(L.elem[i-1]);

    for(p=&(L.elem[L.length-1]);p>=q;p--)  //元素后移

            *(p+1)=*p;

   *q=e;           //完成元素插入

    ++L.length;        

    return(OK);

}

 

 

//顺序表遍历显示

Status ListTraverse_Sq(SqList L)

{ int i=0;

   if(!L.elem)

            return ERROR;

   while(i<L.length)

            printf("%d ",L.elem[i++]);

   printf("\n");

   return OK;

}

//顺序表逆置

void Reverse_Sq(SqList &L)

{

      int i,j;

    ElemType temp;

for(i=0,j=L.length-1; i<j; i++,j--)

     {

            temp=L.elem[i];

            L.elem[i]=L.elem[j];

            L.elem[j]=temp;

     }

}

void main()

{

   SqList L;

   char flag;

   int i;

   ElemType e;

   if(InitList_Sq(L)==OK)

   {

            printf("建立空顺序表成功!\n");

            do{

                     printf("当前线性表长度为:%d\n",L.length);

                     printf("请输入要插入元素的位置:");

                     scanf("%d",&i);

                     printf("请输入要插入的元素值:");

                     scanf("%d",&e);

                     if(ListInsert_Sq(L,i,e)==OK)

                     {

                              printf("插入成功,插入后顺序表长度为:%d\n",L.length);

                              printf("插入后的顺序表为:");

                              ListTraverse_Sq(L);

                     }

                     else

                              printf("插入失败");

                     printf("\n继续插入元素?(y/n)  ");

                     fflush(stdin);

                     scanf("%c",&flag);

            }while(flag=='y');

   

            Reverse_Sq(L);

            printf("顺序表逆置后为:\n");

        ListTraverse_Sq(L);

   }

   else

            printf("顺序表初始化失败!\n");

}


编译出错信息显示如下:

-------------------Configuration: test4125 - Win32 Debug--------------------
Compiling...
test4125.c
e:\程序练习文档1\test4125.c(22) : error C2143: syntax error : missing ')' before '&'
e:\程序练习文档1\test4125.c(22) : error C2143: syntax error : missing '{' before '&'
e:\程序练习文档1\test4125.c(22) : error C2059: syntax error : '&'
e:\程序练习文档1\test4125.c(22) : error C2059: syntax error : ')'
e:\程序练习文档1\test4125.c(33) : error C2143: syntax error : missing ')' before '&'
e:\程序练习文档1\test4125.c(33) : error C2143: syntax error : missing '{' before '&'
e:\程序练习文档1\test4125.c(33) : error C2059: syntax error : '&'
e:\程序练习文档1\test4125.c(33) : error C2059: syntax error : ')'
e:\程序练习文档1\test4125.c(64) : error C2143: syntax error : missing ')' before '&'
e:\程序练习文档1\test4125.c(64) : error C2143: syntax error : missing '{' before '&'
e:\程序练习文档1\test4125.c(64) : error C2059: syntax error : '&'
e:\程序练习文档1\test4125.c(64) : error C2059: syntax error : ')'
e:\程序练习文档1\test4125.c(81) : warning C4013: 'InitList_Sq' undefined; assuming extern returning int
e:\程序练习文档1\test4125.c(90) : warning C4013: 'ListInsert_Sq' undefined; assuming extern returning int
e:\程序练习文档1\test4125.c(103) : warning C4013: 'Reverse_Sq' undefined; assuming extern returning int
Error executing cl.exe.


test4125.obj - 12 error(s), 3 warning(s)



 

加载中
0
若海
若海

代码没有问题,应该是你使用的编译器错了。我在MinGW中编译通过,执行也是正常的。代码:

#include <stdio.h>
#include <malloc.h>
#include <process.h>

#define  LIST_INIT_SIZE     100
#define  LISTINCREMENT    10

#define   OK                 1
#define   ERROR                0
#define   OVERFLOW          -2

typedef    int    Status;
typedef    int    ElemType;

typedef  struct
{
    ElemType  *elem;
    int  length;
    int  listsize;
} SqList;

//创建空顺序表
Status InitList_Sq( SqList &L )
{
    L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType));
    if (!L.elem)
        exit(OVERFLOW);
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return OK;
}

//顺序表在第i个元素之前插入e
Status ListInsert_Sq( SqList &L, int i, ElemType e)
{
    ElemType *newbase,*q,*p;
    if(i<1 || i>L.length+1)  //插入位置非法
        return ERROR;

    if(L.length>=L.listsize)//溢出,动态追加空间
    {
        newbase= (ElemType *)realloc(L.elem, (L.listsize+ LISTINCREMENT) *sizeof(ElemType));
        if(!newbase) exit(OVERFLOW);
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
    }
    q=&(L.elem[i-1]);
    for(p=&(L.elem[L.length-1]); p>=q; p--) //元素后移
        *(p+1)=*p;
    *q=e;           //完成元素插入
    ++L.length;
    return(OK);
}


//顺序表遍历显示
Status ListTraverse_Sq(SqList L)
{
    int i=0;
    if(!L.elem)
        return ERROR;
    while(i<L.length)
        printf("%d ",L.elem[i++]);
    printf("\n");
    return OK;
}
//顺序表逆置
void Reverse_Sq(SqList &L)
{
    int i,j;
    ElemType temp;
    for(i=0,j=L.length-1; i<j; i++,j--)
    {
        temp=L.elem[i];
        L.elem[i]=L.elem[j];
        L.elem[j]=temp;
    }
}
int main()
{
    SqList L;
    char flag;
    int i;
    ElemType e;
    if(InitList_Sq(L)==OK)
    {
        printf("建立空顺序表成功!\n");
        do
        {
            printf("当前线性表长度为:%d\n",L.length);
            printf("请输入要插入元素的位置:");
            scanf("%d",&i);
            printf("请输入要插入的元素值:");
            scanf("%d",&e);
            if(ListInsert_Sq(L,i,e)==OK)
            {
                printf("插入成功,插入后顺序表长度为:%d\n",L.length);
                printf("插入后的顺序表为:");
                ListTraverse_Sq(L);
            }
            else
                printf("插入失败");
            printf("\n继续插入元素?(y/n)  ");
            fflush(stdin);
            scanf("%c",&flag);
        }
        while(flag=='y');

        Reverse_Sq(L);
        printf("顺序表逆置后为:\n");
        ListTraverse_Sq(L);
    }
    else
        printf("顺序表初始化失败!\n");
}



执行:

返回顶部
顶部