回 帖 发 新 帖 刷新版面

主题:路过的朋友看看

这个程序  在查找数据时有点问题 可以通过 但是不能实现查找功能  又找不出错误
麻烦大家 看看  谢谢
 
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10

#define  OVERFLOW 2
#define  OK 1
#define ERROR -1
typedef  int  ElemType ;
typedef  int   status;
typedef struct { ElemType *elem;
                int length;
               int listsize;
        } SqList;
     status InitList (SqList *L)   /*定义一个线形表*/
     {  int length1;
         printf("请确定顺序的长度");
         scanf("%d",&length1);
         L->listsize=length1;
         L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
         if(!L)
         {printf("out of space");
          exit(OVERFLOW);
          }
         L->length=0;
            return OK;}
    status Listinsert (SqList*L,int i, ElemType e)    /*在i元素的前面插入元素e*/
    {
       ElemType  *p,*q,*newbase;
        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==NULL)
             {
                  printf("out of space");
                     return (OVERFLOW);
               }
          L->listsize+=LISTINCREMENT;
            p=&( L->elem[i-1]);
           for(q=&(L->elem[L->length-1]) ;q>=p;q--)
                *(q+1)=*q;
                      L->elem[i-1]=e;
                        L->length++;
                        return OK;
                        }
    status DeleteList (SqList *L,int i)   /*删除i个元素*/
    { ElemType   *q ,*p;
        if(i<1||i>L->length)
          return ERROR;

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

       p=L->elem+L->length-1;
       for(q++;q>=p;q++)
               *(q-1)=*q;
          L->length--;
       
         return OK;
         }
    status compare(ElemType x,ElemType y)
    {  if(x==y)
       return OK;
      else return 0;}


   status LocateElem (SqList L,ElemType e)   /*查找元素*/
   {  int i=0,*p;
       p=L.elem;
       while(i< L.length&&!(*compare)(*p++,e))
             i++;
           if(i<L.length)
            return i;
          else  return 0;   }



        main()
    {   SqList L;
        ElemType i,e;

        if(InitList(&L)==OVERFLOW) printf("ERROR");
        else  printf("\n************************************************\n");
           {   printf("请输入线性表的元素:");
                for(i=0;i<L.listsize;i++)
           { scanf("%d",&(L.elem[i]));L.length++; }
           }
       for(i=0;i<L.listsize;i++)
         printf("%4d",L.elem[i]);
       printf("\n************************************************\n");
        printf("请输入要插入的位置和元素:") ;
        scanf("%d%d",&i,&e);
       Listinsert (&L,i,e);
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
         printf("\n************************************************\n");
         printf("请输入要删除的元素的位置:") ;
          scanf("%d",&i);
       DeleteList (&L, i ) ;
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
        printf("\n************************************************\n");
         printf("\n***********************请输入你要查找的元素的值*****************:");
        scanf("%d",&e) ;
       LocateElem(L,e);      /*寻找用户所要查找的元素*/
       printf("请按任意键退出");
       getch();
 }
 

回复列表 (共3个回复)

沙发

按照你的要求已经帮你改拉!!
呵呵!不过呢?你的删除有点问题,希望你自己能够改正!
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10

#define  OVERFLOW 2
#define  OK 1
#define ERROR -1
typedef  int  ElemType ;
typedef  int   status;
typedef struct { ElemType *elem;
                int length;
               int listsize;
        } SqList;
     status InitList (SqList *L)   /*定义一个线形表*/
     {  int length1;
         printf("请确定顺序的长度");
         scanf("%d",&length1);
         L->listsize=length1;
         L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
         if(!L)
         {printf("out of space");
          exit(OVERFLOW);
          }
         L->length=0;
            return OK;}
    status Listinsert (SqList*L,int i, ElemType e)    /*在i元素的前面插入元素e*/
    {
       ElemType  *p,*q,*newbase;
        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==NULL)
             {
                  printf("out of space");
                     return (OVERFLOW);
               }
          L->listsize+=LISTINCREMENT;
            p=&( L->elem[i-1]);
           for(q=&(L->elem[L->length-1]) ;q>=p;q--)
                *(q+1)=*q;
                      L->elem[i-1]=e;
                        L->length++;
                        return OK;
                        }
    status DeleteList (SqList *L,int i)   /*删除i个元素*/
    { ElemType   *q ,*p;
        if(i<1||i>L->length)
          return ERROR;

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

       p=L->elem+L->length-1;
       for(q++;q>=p;q++)
               *(q-1)=*q;
          L->length--;
       
         return OK;
         }
    status compare(ElemType x,ElemType y)
    {  if(x==y)
       return OK;
      else return 0;}


   status LocateElem (SqList L,ElemType e)   /*查找元素*/
   {  int i=0,*p;
       p=L.elem;
       while(i< L.length&&!compare(*p++,e))
             i++;
           if(i<L.length)
            return i;
          else  return 0;   }



        main()
    {   SqList L;
        ElemType i,e;

        if(InitList(&L)==OVERFLOW) printf("ERROR");
        else  printf("\n************************************************\n");
           {   printf("请输入线性表的元素:");
                for(i=0;i<L.listsize;i++)
           { scanf("%d",&(L.elem[i]));L.length++; }
           }
       for(i=0;i<L.listsize;i++)
         printf("%4d",L.elem[i]);
       printf("\n************************************************\n");
        printf("请输入要插入的位置和元素:") ;
        scanf("%d%d",&i,&e);
       Listinsert (&L,i,e);
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
         printf("\n************************************************\n");
         printf("请输入要删除的元素的位置:") ;
          scanf("%d",&i);
       DeleteList (&L, i ) ;
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
        printf("\n************************************************\n");
         printf("\n***********************请输入你要查找的元素的值*****************:");
        scanf("%d",&e) ;
       LocateElem(L,e);  
       printf("%d\n",(LocateElem(L,e)+1));/*寻找用户所要查找的元素*/
       printf("请按任意键退出");
       getch();
 }
 

 

板凳

又帮你改了改
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10

#define  OVERFLOW 2
#define  OK 1
#define ERROR -1
typedef  int  ElemType ;
typedef  int   status;
typedef struct { ElemType *elem;
                int length;
               int listsize;
        } SqList;
     status InitList (SqList *L)   /*定义一个线形表*/
     {  int length1;
         printf("请确定顺序的长度");
         scanf("%d",&length1);
         L->listsize=length1;
         L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
         if(!L)
         {printf("out of space");
          exit(OVERFLOW);
          }
         L->length=0;
            return OK;}
    status Listinsert (SqList*L,int i, ElemType e)    /*在i元素的前面插入元素e*/
    {
       ElemType  *p,*q,*newbase;
        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==NULL)
             {
                  printf("out of space");
                     return (OVERFLOW);
               }
          L->listsize+=LISTINCREMENT;
            p=&( L->elem[i-1]);
           for(q=&(L->elem[L->length-1]) ;q>=p;q--)
                *(q+1)=*q;
                      L->elem[i-1]=e;
                        L->length++;
                        return OK;
                        }
    status DeleteList (SqList *L,int i)   /*删除i个元素*/
    { ElemType   *q ,*p;
        if(i<1||i>L->length)
          return ERROR;

      

       p=L->elem+L->length-1;
       for(q=&(L->elem[i-1]);q<=p;q++)
               *(q-1)=*(q);
          L->length--;
       
         return OK;
         }
    status compare(ElemType x,ElemType y)
    {  if(x==y)
       return OK;
      else return 0;}


   status LocateElem (SqList L,ElemType e)   /*查找元素*/
   {  int i=0,*p;
       p=L.elem;
       while(i< L.length&&!compare(*p++,e))
             i++;
           if(i<L.length)
            return i;
          else  return 0;   }



        main()
    {   SqList L;
        ElemType i,e;

        if(InitList(&L)==OVERFLOW) printf("ERROR");
        else  printf("\n************************************************\n");
           {   printf("请输入线性表的元素:");
                for(i=0;i<L.listsize;i++)
           { scanf("%d",&(L.elem[i]));L.length++; }
           }
       for(i=0;i<L.listsize;i++)
         printf("%4d",L.elem[i]);
       printf("\n************************************************\n");
        printf("请输入要插入的位置和元素:") ;
        scanf("%d%d",&i,&e);
       Listinsert (&L,i,e);
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
         printf("\n************************************************\n");
         printf("请输入要删除的元素的位置:") ;
          scanf("%d",&i);
       DeleteList (&L, i ) ;
       for(i=0;i<L.length;i++)
         printf("%4d",L.elem[i]);
        printf("\n************************************************\n");
         printf("\n***********************请输入你要查找的元素的值*****************:");
        scanf("%d",&e) ;
       LocateElem(L,e);  
       printf("%d\n",(LocateElem(L,e)+1));/*寻找用户所要查找的元素*/
       printf("请按任意键退出");
       getch();
 }
 

 

3 楼

答得好,坚持

我来回复

您尚未登录,请登录后再回复。点此登录或注册