3.单链表内元素的查找
2010-05-02 09:32
120 查看
多的不说,对于这些概念等在严蔚敏老师的书中都讲的很详细,这里是给大家分享一些实例。让大家加深数据结构的学习。
希望大家多多支持:
C++奋斗乐园|C++论坛|算法学习|ACM/ICPC :http://www.cppleyuan.com/
豆瓣小组:http://www.douban.com/group/217679/
②群:23840480
希望大家多多支持:
C++奋斗乐园|C++论坛|算法学习|ACM/ICPC :http://www.cppleyuan.com/
豆瓣小组:http://www.douban.com/group/217679/
②群:23840480
/******************************** 单链表的查找 ********************************/ //算法功能:按序号或按值查找单链表中的元素 //算法思路:由于单链表是非顺序存储结构,元素之间通过指针来描述逻辑结构,因而无法实现随机存取,查找过程只能是 //顺链扫描。若查找单链表中第i个元素,则要从单链表的第一个结点开始,用p做标记指针,j做计数器,顺序扫描链表。 //当p不为空,而且 j=i 时,指针p所指结点元素即为所要找的第i个元素,用e返回该元素的值。按值查找则是从单链表 //头结点开始,用p做标记指针,i做计数器,当p不为空,p所指的当前结点元素与e比较,若相等则返回该结点在链表中 //的位置i,否则返回0,表示查找失败。 #include <stdio.h> #include <malloc.h> typedef int Status; #define OK 1; #define ERROR 0; //定义链表数据存储结构 typedef struct LNode { int data; struct LNode *next; }LNode, *Linklist; //打印链表元素 void print_list(Linklist L) { Linklist p; printf("建立的单链表为:/n"); p = L->next; while(p != NULL) { printf("%d ", p->data); p = p->next; } printf("/n"); } //逆序输入数据元素,建立带头结点的单链表 void creat_list(Linklist &L) { Linklist p; L = (LNode*) malloc (sizeof(LNode)); //建立链表头结点 L->next = NULL; printf("请逆序输入链表数据元素Ctrl+Z结束,建立带头结点的链表:/n"); p = (LNode*) malloc (sizeof(LNode)); while((scanf("%d", &(p->data))) != EOF) // 按Ctrl+Z组合键结束输入 { p->next = L->next; L->next = p; p = (LNode*) malloc (sizeof(LNode)); } } //L是带头结点的链表的头指针,以 e 返回第 i 个元素 Status Getelem(LNode *L, int i, int &e) { int j = 1; Linklist p; p = L->next; while(p && j < i) { p = p->next; j++; } if(!p || j>i) { printf("没有这个数/n"); return ERROR; } e = p->data; return OK; } //L是带头结点的链表,若L中有元素e,返回第一个匹配元素的位置 int LocateElem(Linklist L, int e) { Linklist p; int i = 0; p = L->next; while(p) { i++; if(p->data == e) return i; p = p->next; } return 0; } int main() { Linklist L; int e, i; creat_list(L); print_list(L); printf("请输入你要查找的元素的位置i:"); scanf("%d", &i); if(Getelem(L, i, e)) printf("第%d个元素的值是:%d/n", i, e); printf("/n请输入你要查找的元素e:"); scanf("%d", &e); if(LocateElem(L, e)) printf("元素%d在单链表中是第%d个元素/n", e, LocateElem(L, e)); else printf("没有这个元素!/n"); return 0; }
相关文章推荐
- 链表的基本操作 (1)采用尾插法建立一个链表; (2)输入一个元素,在道表中查找该元素是否存在,请给出相关信息; (3)将链表中的元素进行就地逆置。
- 查找一个单向链表中倒数第K个元素
- 数据结构链表 -- 查找倒数第N个元素、中间元素、创建链表
- 单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)
- 链表中间元素查找问题
- 查找单链表中倒数第m个元素
- 《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 用单链表实现查找(获取)倒数第m个元素(转自IT博客网chlclan的博客)
- [C语言]查找链表的中间元素
- 《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(非递归)
- java实现单向链表CRUD,反转,排序,查找倒数第k个元素,递归输出等操作
- 查找元素的操作(单链表)
- 【Weiss】【第03章】练习3.11:比较单链表递归与非递归查找元素
- 单链表查找中间元素
- 查找链表的倒数第k个元素
- 在两个有序链表中查找第K大元素。
- 查找包含有序链表元素最小取值范围SearchMinPair
- 查找单链表中倒数第k个元素
- 算法分析-查找单链表中的倒数第k个元素和中间元素