6-2 單鏈表元素定位 (12 分)
阿新 • • 發佈:2018-09-14
一個 結點 頭結點 生成 reat clu class 函數接口 turn
本題要求在鏈表中查找第一個數據域取值為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 *temp = L->next; int pos=0; while(temp!=NULL) { ++pos; if(temp->data == x) return pos; else { temp = temp->next; } } return 0; }
6-2 單鏈表元素定位 (12 分)