echoccl 2021-10-13 13:33 采纳率: 50%
浏览 69

代码没错,但是输入数据后按回车键黑框就消失了



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

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef int Status;
typedef int ElemType;
typedef  struct  LNode {    //声明结点的类型和指向结点的指针类型  
    ElemType data;    //数据元素的类型 
    struct   LNode  *next;   //指示结点地址的指针  
}LNode, *LinkList; 

void InitList_L(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)exit (OVERFLOW);
    L->next=NULL;
}//初始化

void DestroyList_L(LinkList &L){
     //销毁以 L 为头指针的单链表,释放链表中所有结点 
    while(L){ 
    LinkList    p=L; 
        L=L->next; 
        free(p); 
    }//while 
}//DestroyList_L 

void CreateList_L(LinkList &L, int n){
    int i;
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)exit (OVERFLOW);
    L->next=NULL;
    for(i=n;i>0;i--){
        LinkList p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
    }
}//头插法建表 
     
Status GetElem_L(LinkList &L, int i, ElemType e){
    LinkList    p=L->next;
    int j=1;
    while(p&&j<i){
        p=p->next;j++;
    } 
    if(!p||j>i) return ERROR;
    e=p->data;
    return OK;
}//按序号查找 

Status ListInsert_L(LinkList &L, int i, ElemType e){ 
    LinkList    p=L;    int j=0; 
    while( p && j<i-1){p=p->next;   ++j;}    //寻找第 i-1 个结点  
    if(!p || j>i-1)    return ERROR;    // i 小于 1 或者大于表长 
    LinkList s=(LinkList)malloc(sizeof(LNode));    // 生成新结点 
    s->data=e; 
    s->next=p->next;        //插入 L 中 
    p->next=s; 
    return OK; 
}//LinstInsert_L 

Status ListDelete_L(LinkList &L, int i, ElemType &e) {
    LinkList    p=L;   int j=0; 
    while( p->next && j<i-1)     { p=p->next;  ++j;} 
    if(!( p->next) || j>i-1)    return ERROR;  //删除位置不合理 
    LinkList q=p->next; 
    p->next=q->next;     //删除结点
    e=q->data; 
    free(q); //释放结点
    return OK; 
}//ListDelete_L 

void  ListShow_L(LinkList L){
    LinkList p=L->next;
    while (p){
        printf("%d\t",p->data);
    p=p->next;
    }
    printf("\n");
}

int main(){
    LinkList La;
    int i,n;
    ElemType e;
    InitList_L(La);
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&e);
         ListInsert_L(La,i+1,e);
    }
    ListShow_L(La);
    return 0;
}




img

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-10-13 13:37
    关注

    if(!p || j>i-1) return ERROR; // i 小于 1 或者大于表长
    应该是 if(p==NULL || j>i-1) return ERROR;吧
    怎么会!p呢。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)