6-35 單鏈表元素定位 (12 分)
阿新 • • 發佈:2018-12-20
6-35 單鏈表元素定位 (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)
{
LinkList p = L->next;
int j = 1;
while(p&&p->data!=x)
{
p = p->next;
j++;
}
if(!p)
return 0;
else
return j;
}