goinwin 2023-03-15 13:05 采纳率: 100%
浏览 20
已结题

为什么我的程序总是自己提前结束?

程序没有报错,但每次调用CreatList()的时候就结束了,一直运行不下去,这是为什么?

#include<stdio.h>
#include<stdlib.h>
#include<math.h> 
#define MAX_SIZE 100
#define LISTINCREMENT 10
#define OK 1;
#define ERROR 0;
typedef int DataType;
typedef struct{
    DataType *elem;
    int length;
    int listsize;
}SqList;
int InitList_sq(SqList &L){//建立一个空表L 
    L.elem=(DataType *)malloc(sizeof(DataType)*MAX_SIZE); 
    //用malloc函数开辟一块大小为MAX_SIZE且类型为DataType的空间 
    if(!L.elem)exit(OVERFLOW);
    //OVERFLOW为math.h的一个宏定义,其值为3, 含义为运算过程中出现了上溢 
    L.length=0;//空表长度为0 
    L.listsize=MAX_SIZE; 
    return OK;
}
void Empty (SqList *L){//顺序表判空 
    if(L->length==0) printf("空表。");//L指向结构体中的length,成员变量为指针所以使用-> 
    else printf("不是空表。");
}
int ListInsert (SqList &L,int i,DataType e){
    //在顺序线性表L中插入元素e使其在第i个位置
    int *newbase,*q,*p;
    if(i<1||i>L.length+1)return    ERROR;
    if(L.length>=L.listsize){//当前存储空间已满,增加分配 
        newbase=(DataType *)realloc(L.elem,
           (L.listsize+LISTINCREMENT)*sizeof(DataType));
        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; 
} 
int ListDelete(SqList &L,int i,DataType &e ){
    int *p,*q;
    if(i<1||i>L.length)return ERROR;
    p=&(L.elem[i-1]);//p是被删除元素的地址 
    e=*p ;//把被删除的值赋给e
    q=L.elem+L.length-1;//L.elem是首元素的地址+L.length总数组的长度-1即为表尾元素的地址
    for(p=p+1;p<=q;p++)    *(p-1)=*p;
    L.length--;
    return OK;
}
int CreatList(SqList *L,DataType a[],int n){
    if(n>MAX_SIZE){return ERROR;}
    else 
    {for(int i=0;i<n;i++)
     L->elem[i]=a[i];
     L->length=n;
     return OK;}
}
int ListLength(SqList &L){
    return(L.length);
}
int LocateELem(SqList &L,DataType *e){
    int i;
    for(int i=0;i<L.length;i++)
    if(L.elem[i]==*e) return i+1;
    else return OK;
}
int GetElem(SqList &L,int i){
    if(i<1||i>L.length){
        printf("查找失败\n");return 0;
    }
    else {printf("检索的元素为%d。\n",L.elem[i-1]);return 1;}
}
int main()
{
    int i ,j,*e,n,a[200];
    SqList L; 
    while(i!=10){
        printf("1.建立空表\n2.存储数据\n3.删除指定位置元素\n4.在指定位置插入元素\n5.按值检索元素\n6.按位置检索元素\n7.判空\n8.输出顺序表长度\n9.输出顺序表\n10.结束操作\n");
         printf("请输入要进行的操作:\n");
         scanf("%d",&i);
         switch (i) {
             case 1:
                 if(InitList_sq(L))printf("建立成功!\n");
                else printf("建立失败。\n"); 
                 break;
             case 2:
                 printf("请指定顺序表大小:\n");
                 scanf("%d",&n);
                 printf("请输入存储元素:\n");
                 for (j=0;j<n;j++)
                 scanf("%d",a[j]);
                 if(CreatList(&L,a,n))printf("顺序表的空间不够,无法建立顺序表\n");
                else printf("存储成功!\n");
                break;
                
             case 3:
                 printf("请输入删除元素位置:\n");
                 scanf("%d",&j);
                 if(ListDelete(L,j,*e))printf("删除元素为%d\n",*e);
                 else printf("删除失败!\n");
                break;
            case 4:         
                 printf("请输入插入元素位置:\n");
                 scanf("%d",&j);
                printf("请输入插入元素:\n");
                scanf("%d",e);
                 if(ListInsert(L,j,*e))printf("插入成功!\n");
                 else printf("插入失败!\n");
                break;
            case 5:         
                printf("请输入检索元素的值:\n");
                scanf("%d",e);
                printf("在第%d个位置。\n",LocateELem(L,e));
                break;
            case 6:
                printf("请输入检索元素的位置:\n");
                scanf("%d",&j);
                GetElem(L,j);
                break;
            case 7:
                Empty(&L);            
                break;
            case 8:    
                printf("顺序表长度为%d。\n",ListLength(L));
                break;        
            case 9:
                for(j=0;j<L.length;j++)
                {printf("%5d",L.elem);
                if(j%5==0)printf("\n");
                break;                    
             default:printf("不存在此操作项!\n"); 
                 break;
         } 
         
    }
    }
   return 0; 
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-15 13:18
    关注

    崩溃了么?运行界面截图看一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退