m0_59339331 2022-04-13 19:10 采纳率: 100%
浏览 18
已结题

链表报错 ,帮助理解结构体调用

问题遇到的现象和发生背景

dev_C++软件
看网课学习,但是代码缺少,没有主程序;
理解方法中的指针调用,但是无法写出主程序;
在mian{
多写注释来帮助理解,谢谢
}
其他都是按着网课来的;

/*
要求
四、    实验内容及步骤(对重要过程和结果需要抓图)
1.实验内容
(1)用头插法或者尾插法建立包含若干元素的单链表;
(2)对已建立的链表表实现插入、删除、查找等基本操作。
具体要求如下:
(1) 初始化链表L(元素类型为char型)
(2) 依次采用尾插法插入a, b, c, d, e元素
(3) 输出链表L

(4//输出链表L的长度
(5) 判断链表L是否为空
(6) 输出链表L的第3个元素
(7) 输出元素'a' 的位置
(8) 在第4个元素位置上插入'f'元素
(9) 输出链表L
(10) 删除链表L的第3个元素
(11) 输出链表
(12) 释放链表
 
2.实验步骤
(1)    建立单链表的数据结构
参考(C语言)
typedef char ElemType;
 
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LinkList;

(2)    定义单链表的操作
void InitList(LinkList *&L);//初始化链表 
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法插入元素
bool ListEmpty(LinkList *L);//判断是否为空表
int ListLength(LinkList *L);//求单链表长度
void DispList(LinkList *L);//输出单链表元素 
bool GetElem(LinkList *L,int i,ElemType &e);//查找第i个节点的元素 
int LocateList(LinkList *L,ElemType e);//按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e);//插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e);//删除数组元素
void DestroryList(LinkList *&L);//销毁单链表

(3)    实现上述操作(推荐使用带头结点)

(4)    输入数据进行测试(要求附截图)


*/

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
 
typedef struct LNode{//声明  结点类型和指向结点的指针类型 
    ElemType data;//结点数据域 
    struct LNode *next;//节点指针域 //存地址 
}LNode,*LinkList;//LNode  指针 ,linklist  数据 //结构类型
  
/* linklist  是指向结构体linklistLNode 的指针类型; 
LinkList;类型的指针;
LNode .data; 

*/
void ClearList(LinkList &L);  //清空; 
void InitList(LinkList &L);  //初始化链表 1111111
void CreateListR(LinkList &L,ElemType a[],int n);//尾插法插入元素
bool ListEmpty(LinkList L);  //判断是否为空表
int ListLength(LinkList L);//求单链表长度
  void DispList(LinkList L);//输出单链表元素 
bool GetElem(LinkList L,int i,ElemType &e);//查找第i个节点的元素 
int LocateList(LinkList L,ElemType e);//按元素值查找
bool ListInsert(LinkList &L,int i,ElemType e);//插入数据元素
bool ListDelete(LinkList &L,int i,ElemType &e);//删除数组元素
void DestroryList(LinkList &L);//销毁单链表
void InitList(LinkList &L){
    L=new LNode; 
    L->next=NULL;
    
}
bool ListEmpty(LinkList L){
    if(L->next)
    return 0;
    else
    return 1;
    
    
}
void DestroryList(LinkList &L){
    LNode *p;
    while(L){
        p=L;
        L=L->next;
        delete p;
    }

}
void ClearList(LinkList &L){
    LNode *p,*q;
    p=L->next;
    while(p){    
    delete p;
    p=q;
  }
  L->next=NULL;

}
int ListLength(LinkList L){
    LinkList p;
    p=L->next;
    int i=0;
    while(p){
        i++;
        p=p->next;
    }
    printf("Length:%d\n",i);
    return i;
}
bool GetElem(LinkList L,int i,ElemType &e){
    LinkList p;
    p=L->next;
    int j=1;while(p&&j<i){
        p=p->next;
        ++j;
    }
    if(!p||j>i)
    return 0;
    e=p->data;
    return 1;
    }
int LocateList(LinkList L,ElemType e){
    LinkList p=L->next;
    int j=1;
    while(p&&p->data!=e){
        p=p->next;
        j++;
    }
    if(p)
    return j;
    else
    return 0;
}
bool ListInsert(LinkList &L,int i,ElemType e){
    LinkList p=L;
    int j=0;
    while(p&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
    return 0;
    LinkList s=new LNode;//s是什么类型????????????? 
    s->data=e;
    s->next=p->next;
    p->next=s;
    return 1;
}
bool ListDelete(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 0;
    LinkList q=p->next;
    p->next=q->next;
    e=q->data;
    delete q;
    return 1;
    
    
}
//头插

void CreateListH(LinkList &L,ElemType a[],int n){
    L=new LNode;//头结点指控 
    L->next=NULL;//建立带头结点 
    for(int i=n;i>0;i--){
        LinkList p=new LNode;
        scanf(&p->data);//cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}
//尾插 
void CreateListR(LinkList &L,ElemType a[],int n){//R  代表rear 尾结点 
    L=new LNode;//头结点指控 
    L->next=NULL;//建立带头结点 
    LinkList r=L;//
    for(int i=0;i<n;i++){
        LinkList p=new LNode;
        scanf(&p->data);//cin>>p->data;
        p->next=NULL;
        r->next=p;
        
    }
    
}
 void DispList(LinkList L){
     printf("L链表;");
     while(L->next!=NULL){
         L=L->next;
         printf("%c\t ",L->data); 
     } 
     printf("\n");
     
     
 }
 int main(void){
     LinkList L = NULL;
     InitList(LinkList &L);
     //初始化链表L(元素类型为char型)
     printf("依次采用尾插法插入a, b, c, d, e元素");
 
    CreateListR(LinkList &L,ElemType a[],int n=5);
    

    InsertLinkList(&L);
    DispList(LinkList L);//输出链表L
    ListLength(LinkList L);//输出链表L的长度
    ListEmpty(LinkList L);//判断链表L是否为空
     GetElem(LinkList L,int i,ElemType &e);//输出链表L的第3个元素
     return 0;
 }

运行结果及报错内容

img

我的解答思路和尝试过的方法

c语言基础差,写不出主程序,无法正确调动方法
没有主程序,老是报错,不知道如何调试,

我想要达到的结果

完成实验报告,
大部分程序不改动,适当修改程序;
在mian{
多写注释来帮助理解,谢谢
}

  • 写回答

1条回答 默认 最新

  • [PE]经典八炮 2022-04-13 19:31
    关注

    调用函数是传参,不是把声明重写一遍

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助