C语言线性基本操作表新手求教

#definemaxlen100#defineERROR-1#defineNOTFOUNDERROR#defineOK1;typedefintElemType;typed... #define maxlen 100
#define ERROR -1
#define NOTFOUND ERROR
#define OK 1;
typedef int ElemType;
typedef struct list{
ElemType elem[maxlen+1];
int realen;
}List;

int InitList(List *L) //初始化线性表
{
L->realen = 0;
return 1;
}

int DestroyList(List *L) //销毁线性表
{
L->realen = 0;
return 1;
}
int ClearList(List *L) //清空线性表
{
L->realen = 0;
return 1;
}
int ListEmpty(List *L) //判断线性表是否为空
{
return (L->realen==0);
}
int ListLength(List *L) //求线性表的长度
{
return L->realen;
}
ElemType GetElem(List *L, int i) //获取线性表L第i个位置的元素
{
if(i<=L->realen && i>0)
return L->elem[i];
else
return ERROR;
}

ElemType PriorElem(List *L, int cur_e) //求元素cur_e的直接前驱
{
return GetElem(L, cur_e-1);
/*************************
if(1<cur_e && cur_e<=L->realen)
return L->elem[cur_e-1];
else
return ERROR;
*************************/
}

ElemType NextElem(List *L, ElemType cur_e) //求元素cur_e的直接后继
{
int idx;
idx = LocateElem(L, cur_e);
if(idx!=NOTFOUND)
return GetElem(L, cur_e+1);
else
return NOTFOUND;
}

int LocateElem(List *L, ElemType e) //获取元素e在线性表L中所在的位置
{
int i;
for(i=1; i<=L->realen; ++i)
if(e==L->elem[i])
return i;
return NOTFOUND;
}

int ListInsert(List *L, int idx, ElemType e)//在线性表L的第i个位置插入元素e
{
int j;
if(idx<=0 || idx>L->realen+1 || L->realen>=maxlen)
return ERROR;
for(j=L->realen; j>=idx; --j)
L->elem[j+1]=L->elem[j];
L->elem[idx] = e;
L->realen++;
return OK;
}

int ListDelete(List *L, int idx) //删除线性表L第i个位置的元素
{
int j;
if(idx<=0 || idx>L->realen)
return ERROR;
for(j=idx; j<L->realen; ++j)
L->elem[j]=L->elem[j+1];
L->realen--;
return OK;
}

int DeleteElems(List *L, int s[], int size)
{
// 5 8 20 15 17
}

void ListShow(List *L)
{
int i;
for(i=1; i<=L->realen; ++i)
printf("%8d",L->elem[i]);
}

int main()
{
List L;
int i;
InitList(&L);
for(i=1; i<=10; ++i)
ListInsert(&L,1,i);
ListShow(&L);
for(i=1; i<=5; ++i)
ListDelete(&L,i);
printf("\n===========\n");
ListShow(&L);
i=ListLength(&L);
printf("\n%d\n",i);
return 0;
}

这段代码看不懂啊 有没有哪位大神可以告诉我那个ListLength里面return L->realen;为什么返回的是realen
realen数值是从哪儿来的 还有 为什么在List L下面用返回值是8 还有
为什么把ListLength和mian中间的代码省略后输出的长度就不对了呢

谁能帮忙解释下 不胜感激。
展开
 我来答
擦擦设置
2015-10-10 · TA获得超过148个赞
知道小有建树答主
回答量:46
采纳率:0%
帮助的人:66.8万
展开全部
你的第一个问题:为什么返回的是realen,L是一个节点,L->realen就是L节点中的realen。所以自然就是realen。
你的第二个问题: realen数值是从哪儿来的,我大概看了一下,涉及到realen的地方有几个函数:创建线性表,销毁线性表,添加元素和删除元素这四个函数。realen的初始值就0(创建线性表的时候赋值),这几个函数在运行过程中会改变realen的值。
至于你的第三个和第四个问题的话,你表达不是很清楚,请说明清楚。我会继续回答。
什么的返回值是8?省略哪一些代码?
追问
就是定义一个List L 然后使用ListLength函数的话 长度直接就是8了   省略就是只用ListLength函数得不到长度    还有我想问realen数值从哪儿来的  看不懂啊
追答
你的第一个问题:你自己把main函数里面的东西删除,替换成 
List L;
i=ListLength(&L);
printf("\n%d\n",i);
结果是8?
按照你给的当前这个程序的结果我看了一下应该是5。
你的第二个问题:省略掉就是说你直接把把main函数里面的东西删除,替换成
i=ListLength(&L); ??
这样你没有定义L当然不能求长度。所以就不会有结果了。
你的第三个问题:我上面的回答说过了。创建线性表,销毁线性表,添加元素和删除元素这四个函数,当你创建的时候realen就有一个0的初始值。运用其他三个函数(销毁线性表,添加元素和删除元素)就会改变realen的值。具体方法:你看看那些函数里面有realen并且改变了realen的值就可以明白了。
淡若亲风
2015-10-10 · TA获得超过409个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:150万
展开全部
realen是线性表长度,是在初始化线性表并且插入元素产生的,L->realen是访问L指针指向内存的成员变量realen,所以return L->realen当然返回realen
追问
我说为什么返回的是数组长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式