大家帮我看一下,数据结构教程,将单链表的基本运算算法保存到了linknode.cpp文件夹中(即这里的第二个代码),第一个代码是试验“7.按元素值查找,第一个值为e的元素的逻辑序号”的,为什么输出结果没有显示啊?
#include<stdio.h>
#include"linknode.cpp"
int main()
{
int a[5]={1,5,8,10,3};
LinkNode *L; //单链表头指针L
printf("由数组a建立(头插法)的单链表为:\n");
CreateListF(L,a,5); //注意:这里不要写a[5],写为a即可
DispList(L);
printf("第一个值为5的元素的逻辑序号为:%d\n",LocateElem(L,5));
printf("\n");
return 0;
}
//单链表
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
//由数组元素a[0...n-1]创建单链表L
//头插法
void CreateListF(LinkNode *&L,ElemType a[],int n)
{
LinkNode *s;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL; //创建头结点
for(int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a[i];
s->next=L->next;
L->next=s; //将结点s插入原首结点前,头结点后
}
}
//尾插法
void CreateListR(LinkNode *&L,ElemType a[],int n)
{
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
r=L; //r始终指向尾结点
for(int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a[i];
r->next=s;
r=s; //将结点s插入结点r后
}
r->next=NULL;
}
//单链表的基本运算算法
//1.初始化线性表
void InitList(LinkNode *&L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL; //创建头结点
}
//2.销毁线性表
void DestroyList(LinkNode *&L)
{
LinkNode *pre=L,*p=L->next; //pre指向p的前驱结点
while(p!=NULL)
{
free(pre);
pre=p;
p=p->next; //pre,p同步后移一个结点
}
free(pre);
}
//3.判断线性表是否为空表
bool ListEmpty(LinkNode *L)
{
return(L->next==NULL);
}
//4.求线性表的长度
int ListLength(LinkNode *L)
{
int n=0;
LinkNode *p=L;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return n;
}
//5.输出线性表
void DispList(LinkNode *L)
{
LinkNode *p=L->next;
while(p!=NULL)
{
printf("%-4d",p->data);
p=p->next;
}
printf("\n");
}
//6.按序号求线性表中的元素,获取线性表中第i(1<=i<=n)个元素的值 ,并存到e中
bool GetElem(LinkNode *L,int i,ElemType &e)
{
int j=0;
LinkNode *p=L;
if(i<1) return false;
while(j<i&&p!=NULL) //查找第i个结点p
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
//7.按元素值查找,第一个值为e的元素的逻辑序号(从1开始)
int LocateElem(LinkNode *L,ElemType e)
{
int i=1;
LinkNode *p=L->next;
while(p->data!=e||p!=NULL)
{
p=p->next;
i++;
}
if(p==NULL)
return (0);
else
return (i);
}
//8.插入数据元素,在L的第i个位置插入元素e
bool ListInsert(LinkNode *&L,int i,ElemType e)
{
int j=0;
LinkNode *p=L,*s;
if(i<1) return false; //参数i错误时返回false
while(p!=NULL&&j<i-1) //查找第i-1个结点p
{
p=p->next;
j++;
}
if(p==NULL)
return false;
else
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
//9.删除数据元素,删除L的第i个元素,并存到e
bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
int j;
LinkNode *p=L,*q;
if(i<1) return false;
while(p!=NULL&&j<i-1) //查找第i-1个结点p
{
p=p->next;
j++;
}
if(p==NULL)
return false;
else
{
q=p->next; //q指向第i个结点
if(q==NULL)
return false;
else
{
p->next=q->next;
e=q->data;
free(q);
return true;
}
}
}