链式表的按序号查找

6-4 链式表的按序号查找(10 分)

本题要求实现一个函数,找到并返回链式表的第K个元素。

函数接口定义:

ElementType FindKth( List L, int K );

其中List结构定义如下:

typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode List;

L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回ERROR

裁判测试程序样例:

#include 
#include 

#define ERROR -1
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

ElementType FindKth( List L, int K );

int main()
{
    int N, K;
    ElementType X;
    List L = Read();
    scanf("%d", &N);
    while ( N-- ) {
        scanf("%d", &K);
        X = FindKth(L, K);
        if ( X!= ERROR )
            printf("%d ", X);
        else
            printf("NA ");
    }
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1 3 4 5 2 -1
6
3 6 1 5 4 2

输出样例:

4 NA 1 2 5 3

我的理解:

Q1:按序号查找的链表是带头结点,还是不带头结点呢?

A1: 我仔细查看输入样例


和输出样例

,其中“NA”是表示没有查询到指定位置上的结点吗?

(开始时,我这样理解的:我明明输入了6个结点对应的数据值1,3,4,5,2,-1,和结点的数目,怎么会查不到-1呢?

难道是因为链表带有头结点,而且链表的结点数目有限制所导致的吗?

并不是,

1,节点数目有限的是顺序表,回头看结点定义,如下:


显然不是顺序表了。

2.注意线性表与顺序表的定义,与区别

线性表:具有相同特性数据元素的一个有限序列。

线性表的存储结构:顺序存储结构“顺序表”,链式存储结构“链表”。

顺序表:所有元素按照其逻辑顺序,从指定存储位置开始一块连续的存储空间。

链式表的按序号查找_第1张图片

3.为什么查找6号位置的返回值是ERROR----->"NA"?

因为查找的结点的数值是-1时,返回ERROR


链式表的按序号查找_第2张图片

实验代码

##第一种(无头结点的L,编译器可以正确通过)

 ElementType FindKth(List L,int K)
   {
       PtrToLNode p;
       int cnt=1;
       p=L;
       while(p!=NULL&&cnt       {
           p=p->Next;
           cnt++;
       }
       if(cnt==K&&p)
        return p->Data;
       else
        return ERROR;
       

   }


##第二种(有头结点的L,是错误的,我没有真正理解带有头结点L与不带有头结点L的遍历)

(编译器可以正确通过)

(不是从cnt从0开始,就是L带有头结点,此处代码与上一段代码的思想完全一致:不带有头结点)

 ElementType FindKth(List L,int K)
   {
       PtrToLNode p;
       int cnt=0;
       p=L;
       while(p!=NULL&&cnt-1)
       {
           p=p->Next;
           cnt++;
       }
       if(cnt==K-1&&p)
        return p->Data;
       else
        return ERROR;
       

   }

##第三种(带有头结点L的按序查找)

未完。。。




你可能感兴趣的:(链式表的按序号查找)