回 帖 发 新 帖 刷新版面

主题:谁帮我看一下这个,什么老是错啊!!

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR -1
#define OK 1
typedef struct{
  int *elem;
  int length;
  int listsize;
}Sqlist;

Sqlist initlist(Sqlist L)
{
   L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)exit(printf("%s\n","Sqlist L can't be created because of OVERFLOW!"));
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return L;
}

sqlist interlist(Splist L, int i,int m)
 {
  int j,a;
 if(i<1||i>L.length)
  exit(printf("%s\n","ERROR:The delete position is illegal!"));
  ++L.length;
  for(j=i-1;j<=L.length-1;j++)
      L.elem[j]=L.elem[j-1];
      return L;
      }
Sqlist deletesqlist(Sqlist L,int i)
{
  int j;
  if(i<1||i>L.length)
  exit(printf("%s\n","ERROR:The delete position is illegal!"));
  for(j=i;j<=L.length-1;j++)
    L.elem[j-1]=L.elem[j];
  L.length--;
  return L;
}
void main()
{
   Sqlist L;
   int i,k,e;
   L=initlist(L);

   for(i=1;i<=6;i++)
   {
     L.elem[i-1]=i;
     L.length=L.length+1;
     printf("%d\n",L.elem[i-1]);
   }
   printf("%s\n","below is the answer:");
   prinf("\n s=");
   if (s==0);
  {
   printf("\n k=");
   scanf("%d",&k);
   L=deletesqlist(L,k);  }
   else
   printf("\n k= \n m=");
   scanf("%d %d",&k &m);
   L=interlist( L,  k, m)
   for(i=1;i<=L.length;i++)
     printf("%d\n",L.elem[i-1]);
     getch();
}





回复列表 (共3个回复)

沙发

你仔细看看,多了好多变量又没赋值就在用
你一定是在书上改的吧
还有一些符号多了

板凳

Sqlist initlist(Sqlist L)
{
   L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)exit(printf("%s\n","Sqlist L can't be created because of OVERFLOW!"));
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return L;
}
改成下面的试试:
 Sqlist *initlist()
{
   Sqlist *L;
   L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)exit(printf("%s\n","Sqlist L can't be created because of OVERFLOW!"));
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return(L);
}





sqlist interlist(Splist L, int i,int m)
 {
  int j,a;
 if(i<1||i>L.length)
  exit(printf("%s\n","ERROR:The delete position is illegal!"));
  ++L.length;
  for(j=i-1;j<=L.length-1;j++)
      L.elem[j]=L.elem[j-1];
      return L;
      }
改成:
sqlist *interlist(Splist *L, int i,int m)
 {
  int j,a;
 if(i<1||i>L.length)
  exit(printf("%s\n","ERROR:The delete position is illegal!"));
  ++L.length;
  for(j=i-1;j<=L.length-1;j++)
      L.elem[j]=L.elem[j-1];
      return (L);
      }
你的j没有初始值,怎么判断小于1还是大于L.length啊?

3 楼

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR -1
#define OK 1
typedef struct{
  int *elem;
  int length;
  int listsize;
}Sqlist;

Sqlist initlist(Sqlist *L)//掉了*
{
   L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)
   {printf("%s\n","Sqlist L can't be created because of OVERFLOW!")
     exit(1);};
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return OK;
}

sqlist interlist(Splist *L, int i,int m)
 {
  int a,*newbase,*q,*p;
  if(i<1||i>L.length+1)//这里帮你改了一下 不是i>L.length
    return ERROR;//这里改了一下
 
   if(L.Length>=L.listsize)  //为你加的必须判断长度与容量 不然会出现错误
   { newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
      if(newbase==NULL)
      {printf("out of memory");
        exit(1);
      }
    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=m;
    ++L.length;
      return ok;
      }
Sqlist deletesqlist(Sqlist *L,int i)//你一直没加* 补补C语言指针 
{
  int j;// 也和插入时候一样最好用指针 好象你不喜欢用指针 是不是不熟悉呀 要补补呀 一直要补补
  if(i<1||i>L.length)
  exit(printf("%s\n","ERROR:The delete position is illegal!"));
  for(j=i;j<=L.length-1;j++)
    L.elem[j-1]=L.elem[j];
  L.length--;
  return L;
}
void main()
{
   Sqlist L;
   int i,k,e;
   initlist(&L);//要加&

   for(i=1;i<=6;i++)
   {
     L.elem[i-1]=i;
     L.length=L.length+1;//改为L.length++比较好
     printf("%d\n",L.elem[i-1]);
   }
   printf("%s\n","below is the answer:");
   prinf("\n s=");
   if (s==0);
  {
   printf("\n k=");
   scanf("%d",&k);
   L=deletesqlist(L,k);  }
   else
   printf("\n k= \n m=");
   scanf("%d %d",&k &m);
   L=interlist( L,  k, m)
   for(i=1;i<=L.length;i++)
     printf("%d\n",L.elem[i-1]);
     getch();//最好用system("pasue");
}

//你自己看看 抓住自己的薄弱环节 补补 会有进步的 
//开始学习要跟的课本编 当很熟练的 就要创新

我来回复

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