数据结构之单链表的查找

来源:互联网 发布:数据压缩算法的程序 编辑:程序博客网 时间:2024/05/18 02:27

唉。。小白一只,链表的按值查找一直运行错误,希望看到的大佬解惑……


#include <stdio.h>#include <stdlib.h>#include <windows.h>typedef struct singleList {int data;singleList *next;}linklist1;//带头结点的尾插法建表linklist1 *creatByEnd2() {char ch;linklist1 *head, *r;linklist1 *s;head = (linklist1 *)malloc(sizeof(linklist1));r = head;printf("输入各结点数值");ch = getchar();while (ch != '#') {s = (linklist1 *)malloc(sizeof(linklist1));s->data = ch;r->next = s;      //设置当前尾结点的后继为s      !!注意:r->next==(*r).next,是r所指向的结点r = s;            //尾指针指向s                          r=s,是指针ch = getchar();}r->next = NULL;return head->next;  //运行时发现若返回表头指针,则头结点的值被随机分配,所以改为返回头指针的后继//即从开始结点开始打印}//按序号查找linklist1 *getByPos(linklist1 *head, int pos) {linklist1 *p;p = head;int i = 0;while ((p->next != NULL) && (i < pos)) {p = p->next;i++;}if (i == pos) return p;else return NULL;}//按值查找linklist1 *getByData(linklist1 *head, int d) {linklist1 *p;p = head->next;while ((p != NULL)&&(p->data) != d) p = p->next;return p;}void showList1(linklist1 *head) {linklist1  *p;int pos;printf("请输入要查找的序号: ");scanf_s("%d", &pos);p = getByPos(head, pos);if (p != NULL) printf("查找到该序号的结点值为:%c", p->data);      //注意序号从0开始elseprintf("未查找到该序号!");}void showList2(linklist1 *head) {linklist1  *p;int d;printf("请输入要查找的值:");scanf_s("%d", &d);p = getByData(head, d);if (p!= NULL)printf("查找到该值");      elseprintf("未查找到该值!");}void main(){linklist1 *p, *head;head = creatByEnd2();//showList1(head);showList2(head);Sleep(1000);}