weixin_62690582 2021-10-28 12:20 采纳率: 100%
浏览 36
已结题

数据结构顺序表删除元素为什么没有返回值

img

我输入1,删除第一个元素,程序就停止了,这是为什么

#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#include "stdlib.h "
#define INIT_SIZE 5     /*初始分配的顺序表长度*/
#define INCREM 5  
/*溢出时,顺序表长度的增量*/
typedef  int ElemType;  /*定义表元素的类型*/
typedef struct Sqlist
{
    ElemType *slist;      /*存储空间的基地址*/
    int length;           /*顺序表的当前长度*/
    int listsize;         /*当前分配的存储空间*/
}Sqlist;

int InitList_sq(Sqlist *L); /*                 初始化线性表            */
int CreateList_sq(Sqlist *L,int n); /*   输入元素创建线性表                 */
int ListInsert_sq(Sqlist *L,int i,ElemType e);/*     在第i个位置上插入一个新元素            */
int PrintList_sq(Sqlist *L);  /*输出顺序表的元素*/
int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/
int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/

int InitList_sq(Sqlist *L){
    L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
    if(!L->slist) return ERROR;      
    L->length=0;                     
    L->listsize=INIT_SIZE;           
    return OK;                   
}/*InitList*/

int CreateList_sq(Sqlist *L,int n){
    ElemType e;
    int i;
    for(i=0;i<n;i++){
        printf("input data %d",i+1);
        scanf("%d",&e);
        if(!ListInsert_sq(L,i+1,e))
            return ERROR;
    }
    return OK;
}/*CreateList*/

/*输出顺序表中的元素*/
int PrintList_sq(Sqlist *L){
    int i;
    for(i=1;i<=L->length;i++)
        printf("%5d",L->slist[i-1]);
    return OK;
}/*PrintList*/

int ListInsert_sq(Sqlist *L,int i,ElemType e){
    int k;
if(i<1||i>L->length+1) 
return ERROR;    
if(L->length>=L->listsize){  
L->slist=(ElemType*)realloc(L->slist,
(INIT_SIZE+INCREM)*sizeof(ElemType));
        if(!L->slist) 
return ERROR; 
L->listsize+=INCREM;                
}
    for(k=L->length-1;k>=i-1;k--){         
        L->slist[k+1]= L->slist[k];
    }
    L->slist[i-1]=e;                     
    L->length++;                         
    return OK;
}/*ListInsert*/

/*在顺序表中删除第i个元素*/
int ListDelete_sq(Sqlist *L,int i)
{int j;
    if(i<1||i>L->length)return ERROR;
    for(j=i;j<=L->length-1;j++)
        L->slist[j-1]=L->slist[j];
    L->length--;
    return OK;
}

/*在顺序表中查找指定值元素,返回其序号*/
/*int ListLocate(Sqlist *L,ElemType e){    


}*/

int main(){
    Sqlist sl;
    int n,m,k,i;
    printf("please input n:");  /*输入顺序表的元素个数*/
    scanf("%d",&n);
    if(n>0){
        printf("\n1-Create Sqlist:\n");
        InitList_sq(&sl);
        CreateList_sq(&sl,n);
        printf("\n2-Print Sqlist:\n");
        PrintList_sq(&sl);
        printf("\nplease input insert location and data:(location,data)\n");
        scanf("%d,%d",&m,&k);
        ListInsert_sq(&sl,m,k);
        printf("\n3-Print Sqlist:\n");
        PrintList_sq(&sl);
        printf("\n");
        printf("please input number:\n");
         scanf("%d",&i);
        ListDelete_sq(&sl,i);
            
        
        }
    else
        printf("ERROR");
    system("pause");
    return 0;
}


展开全部

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-10-28 12:32
    关注

    不停止能能干什麽啊?删除函数本来就是干了删除数据的事啊,你后面又没有写输出函数啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    CSDN专家-link 2021-10-28 12:38

    删除函数里没有任何输出语句,删除函数之后也没有写PrintList_sq输出。所以一切都是正常的

    回复
    CSDN专家-link 2021-10-28 12:39

    满意还请点击采纳支持一下

    回复
    weixin_62690582 回复 CSDN专家-link 2021-10-28 12:46

    输出语句具体怎么写呢

    回复
    展开全部10条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月29日
  • 创建了问题 10月28日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部