大真真 2021-10-31 12:02 采纳率: 0%
浏览 24

运行之后不显示顺序表的元素,只显示这是一个空表

#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;

//顺序表的顺序存储表示


#define LIST_INIT_SIZE 100//存储空间的初始分配量
#define LISTINCREMENT 10 //存储空间的分配增量
typedef struct{
    ElemType *elem;//存储空间的基址
    int length;//表长
    int size;//存储容量
    int increment;//扩容时,增加的存储容量 

    

} SqList; //顺序表
 
 
 //构造一个顺序表
 Status InitSqlist(SqList &L){
     L.elem=(ElemType *) malloc (LIST_INIT_SIZE*sizeof(ElemType));
     if(!L.elem) exit(OVERFLOW);
     L.length=0;
     L.size=LIST_INIT_SIZE;
     L.increment=LISTINCREMENT;
     return OK;
 } 
 
 //判断顺序表是否为空表
 Status ListEmpty(SqList L){
     if(L.length==0) return OK;
     else return ERROR;
 } 
 
 //顺序表插入函数
 Status ListInsert(SqList &L,int i , ElemType e){
     //此函数将元素e插入指定位置i 
     int j;
       if(i<1||i>L.length||L.length==MAXSIZE)//插入位置非法
          return false;
        for (j=L.length-1;j>=i;--j)// 将元素顺序后移一个位置
               L.elem[j+1]=L.elem[j];
             L.elem[i]=e;//插入e到第i个位置
             L.length++;//表长增1 
             return true;                  
        
 }
 
 //顺序表删除元素函数
 Status ListDelete_Sq(SqList &L,int i,ElemType &e) 
    {
     int k;
     if(i<1||i>L.length-1)
     {
         return ERROR;//i值不合法 
     } 
     e=L.elem[i];//将被删除的元素赋值给e 
     for(k=i;k<L.length-1;k++)//将自i-1后面的所有元素向前移动一位
      {
        L.elem[k]=L.elem[k+1];
      }
     L.length--;//线性表长度减1 
     return OK; 
     

 }
 
 //输出顺序表函数
 void OutList_Sq(SqList L)
 {
     int i;
     ElemType e;
     if(ListEmpty(L)==NULL){
          printf("这是一个空表!");
          
     }  
     else 
     {
         printf ("顺序表为:",i);
         for (i=0;i<L.length;i++)
          printf ("%6d",L.elem[i]);
     }
     printf ("\n");

//主函数
int main() 
{
    SqList L;
       int cord,i;ElemType a;
       printf("第一次使用必须初始化! \n");
       do{
           printf("\n 主菜单\n");
           printf("1 初始化顺序表");
           printf("2 插入一个元素");
           printf("3 删除一个元素");
           printf("4 结束程序运行");
           printf("\n---------------------------\n");
           printf("请输入您的选择(1,2,3,4)");
           scanf("%d"  , &cord);
           printf("\n");
           switch (cord){
               case 1:
                   InitSqlist(L);
                   OutList_Sq(L);
                   break;
               case 2:
                   
        
               printf("\n请输入要插入的位置和数据元素");
                   scanf("%d %d",&i,&a);
                   ListInsert(L,i,a);
                   printf("\n插入%d元素之后的",a);
                   OutList_Sq(L);
                    break;
            case 3:
                
                   printf("\n请输入要删除的数据元素的位置");
                  scanf("%d",&i);
                  ListDelete_Sq(L,i,a);
                  printf("\n删除第%d个位置的元素之后",i);
                  OutList_Sq(L);
                  break;
            case 4:
                exit(0);
    }
}  while(cord<=4);
   return 1;
}

 

 

  • 写回答

1条回答 默认 最新

  • @Tianwx 2023-02-03 11:42
    关注

    1.首先考虑显示空表的条件为 ListEmpty(L)==NULL
    2.新建表之后,调用 ListEmpty() 判断 if(L.length==0),返回值为 OK
    3.如果是C++的话,NULL实际为 (void *)0,用在此处不合适,如果是C的话,NULL 为 0,此处无问题
    4.你的程序我复制过来运行后是正常的,未出现描述问题
    第一次使用必须初始化!

    主菜单
    1 初始化顺序表2 插入一个元素3 删除一个元素4 结束程序运行


    请输入您的选择(1,2,3,4)1

    顺序表为:

    主菜单
    1 初始化顺序表2 插入一个元素3 删除一个元素4 结束程序运行


    请输入您的选择(1,2,3,4)1

    顺序表为:

    主菜单
    1 初始化顺序表2 插入一个元素3 删除一个元素4 结束程序运行


    请输入您的选择(1,2,3,4)2

    请输入要插入的位置和数据元素0 1

    插入1元素之后的顺序表为:

    主菜单
    1 初始化顺序表2 插入一个元素3 删除一个元素4 结束程序运行


    请输入您的选择(1,2,3,4)

    评论

报告相同问题?

问题事件

  • 创建了问题 10月31日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错