您的位置:首页 > 理论基础 > 数据结构算法

数据结构之单链表的查找

2017-10-27 20:34 253 查看
唉。。小白一只,链表的按值查找一直运行错误,希望看到的大佬解惑……

#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开始
else
printf("未查找到该序号!");
}

void showList2(linklist1 *head) {
linklist1 *p;
int d;
printf("请输入要查找的值:");
scanf_s("%d", &d);

p = getByData(head, d);
if (p!= NULL)
printf("查找到该值");
else
printf("未查找到该值!");
}
void main()
{
linklist1 *p, *head;
head = creatByEnd2();
// showList1(head);
showList2(head);
Sleep(1000);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 单链表