数据结构之单链表的查找
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);
}
#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);
}
相关文章推荐
- 数据结构(四)之单链表查找中间结点
- 数据结构 单链表实现前插、后插、前删、后删、显示、查找等等
- 【数据结构】单链表(一)单链表的定义,插入,删除和查找操作
- 数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并
- 数据结构(四)之单链表查找中间结点
- 数据结构单链表的查找
- 数据结构(java)_数组顺序查找
- 数据结构实验之查找六:顺序查找
- 数据结构实验之查找三:树的种类统计
- <sdut-ACM>数据结构实验之查找六:顺序查找
- [PHP] 链表数据结构(单链表)
- 数据结构之单链表
- 数据结构实验之查找七:线性之哈希表
- 数据结构-单链表的基本操作
- 实战数据结构(9)_单链表实现多项式的相乘
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 数据结构—单链表的实现
- 数据结构实验之查找二:平衡二叉树
- SDUT-3375 数据结构实验之查找三:树的种类统计