PTA 數據結構 6-2 單鏈表元素定位

6-2 單鏈表元素定位(12 分)

本題要求在鏈表中查找第一個數據域取值爲x的節點,返回節點的位序。L是一個帶頭結點的單鏈表,函數ListLocate_L(LinkList L, ElemType x)要求在鏈表中查找第一個數據域取值爲x的節點,返回其位序(從1開始),查找不到則返回0。例如,原單鏈表各個元素節點的元素依次爲1,2,3,4,則ListLocate_L(L, 1)返回1,ListLocate_L(L, 3)返回3,而ListLocate_L(L, 100)返回0。

函數接口定義:

int ListLocate_L(LinkList L, ElemType x);

其中 L 是一個帶頭節點的單鏈表。 x 是一個給定的值。函數須在鏈表中查找第一個數據域取值爲x的節點。若找到則返回其位序(從1開始),找不到則返回0。

裁判測試程序樣例:


//庫函數頭文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//函數狀態碼定義
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int  Status;
typedef int  ElemType; //假設線性表中的元素均爲整型

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

Status ListCreate_L(LinkList &L,int n)
{
    LNode *rearPtr,*curPtr;   //一個尾指針,一個指向新節點的指針
    L=(LNode*)malloc(sizeof (LNode));
    if(!L)exit(OVERFLOW);
    L->next=NULL;               //先建立一個帶頭結點的單鏈表
    rearPtr=L;  //初始時頭結點爲尾節點,rearPtr指向尾巴節點
    for (int i=1;i<=n;i++){  //每次循環都開闢一個新節點,並把新節點拼到尾節點後
        curPtr=(LNode*)malloc(sizeof(LNode));//生成新結點
        if(!curPtr)exit(OVERFLOW);
        scanf("%d",&curPtr->data);//輸入元素值
        curPtr->next=NULL;  //最後一個節點的next賦空
        rearPtr->next=curPtr;
        rearPtr=curPtr;
    }
    return OK;
}
//下面是需要實現的函數的聲明
int ListLocate_L(LinkList L, ElemType x);

int main()
{
    LinkList L;
    int n;
    int x,k;   
    scanf("%d",&n);  //輸入鏈表中元素個數
    if(ListCreate_L(L,n)!= OK) {
          printf("表創建失敗!!!\n");
          return -1;
    }
   scanf("%d",&x); //輸入待查找元素
   k=ListLocate_L(L,x);
   printf("%d\n",k);
   return 0;
}

/* 請在這裏填寫答案 */

輸入樣例:

4
1 2 3 4
1

輸出樣例:

1
//代碼如下

int ListLocate_L(LinkList L, ElemType x) {  
    //創建一個指向當前節點的指針  
    LNode* curPtr = L->next;  
    //創建計數器counter,遍歷,若當前節點數據域值=x,返回位置  
    int counter = 1;  
    //若當前指針next爲空,循環結束  
    while(curPtr->next != NULL) {  
        if(curPtr->data == x)  
            return counter;  
        //否則,返回0 (爲什麼呢?) 
        else {  
            curPtr = curPtr->next;  
            counter++;  
        }  
    }  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章