大真真 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日

悬赏问题

  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败