这段代码里写了两种查找,按位置查找,按值查找。
再看代码前有一点瑕疵需要记录。
就是这两个警告。警告的意思就是代码里并不是每一个判断语句里都有返回值。找到警告出现的位置。
就是我写的两个查找的函数里,我为了能够展示出效果来所以写了printf输出语句。
所以为了看到效果,我下面的运行结果图并没有注释这里,所以警告还存在,但是不影响结果。
接下来,为了代码的严谨,我将上面输出语句注释了。修改如下(有两种方案):
- 方案一:函数类型是 int, 结束语句就是 return 1;
- 方案二: 函数类型是 LinkList, 结束语句就是 return p;
#include#include // 定义结构 typedef struct Node{ int data; struct Node *next; }Node,*LinkList; // 初始化 LinkList initList () { LinkList L = (Node *) malloc (sizeof(Node)); L->next = NULL; return L; } // 尾插法插入 void createList(LinkList L) { Node *r,*s; int data; r = L; printf("输入(以-1结束): "); while(1) { scanf("%d",&data); if(data == -1) return; s = (Node*) malloc (sizeof(Node)); s->data = data; r->next = s; r = s; } } // 打印链表 void printList (LinkList L) { Node *r; int data; r = L->next; while (r) { data = r->data; r = r->next; printf("%d -> ",data); } printf("n"); } // 以下标进行查找 LinkList serchIndex(LinkList L, int i) { Node *p; int j; // 用来找到 i位置的值 if(i<0) return 0; p = L; j = 0; while((p->next != NULL) && (jnext; j++; } if(i==j) { // printf("链表中第%d个位置的值是%dn",j,p->data); return p; } else { return 0; } } // 根据值查找 LinkList searchKey(LinkList L, int data) { Node *p; if(!data) return 0; p = L->next; while (p) { if(p->data != data) { p = p->next; } else break; // while里的这个跳出还是要写的,不然不会结束进程 } return p; // printf("找到值%dn",p->data); } // 主函数 int main () { LinkList L; L = initList(); createList(L); printList(L); serchIndex(L,2); searchKey(L,23); return 0; }



