问题遇到的现象和发生背景
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;
}
运行结果及报错内容
我的解答思路和尝试过的方法
c语言基础差,写不出主程序,无法正确调动方法
没有主程序,老是报错,不知道如何调试,
我想要达到的结果
完成实验报告,
大部分程序不改动,适当修改程序;
在mian{
多写注释来帮助理解,谢谢
}
其