- 浏览: 2869949 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
java 代码
- // search.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include "LinkTable.h"
- #define MAX_KEY 500
- //------------------------------数组实现部分----------------------------------
- /**//*
- 无序数组顺序查找算法函数nsq_Order_Search<用数组实现>
- 参数描述:
- int array[] :被查找数组
- int n :被查找数组元素个数
- int key :被查找的关键值
- 返回值:
- 如果没有找到: nsq_Order_Search = -1
- 否则: nsq_Order_Search = key数组下标
- */
- int nsq_Order_Search(int array[],int n,int key)
- ...{
- int i;
- array[n] = key;
- /**//*for循环后面的分号必不可少*/
- for(i=0;key!=array[i];i++);
- return(i<n?i:-1);
- }
- /**//*
- 有序数组顺序查找算法函数sq_Order_Search<用数组实现>
- 参数描述:
- int array[] :被查找数组
- int n :被查找数组元素个数
- int key :被查找的关键值
- 返回值:
- 如果没有找到: sq_Order_Search = -1
- 否则: sq_Order_Search = key数组下标
- */
- int sq_Order_Search(int array[],int n,int key)
- ...{
- int i;
- array[n] = MAX_KEY;
- /**//*for循环后面的分号必不可少*/
- for(i=0;key>array[i];i++);
- if(i<n && array[i] == key)
- return(i);
- else
- return(-1);
- }
- /**//*
- 有序数组二分查找算法函数sq_Dichotomy_Search0<用数组实现>
- 参数描述:
- int array[] :被查找数组
- int n :被查找数组元素个数
- int key :被查找的关键值
- 返回值:
- 如果没有找到: sq_Dichotomy_Search0 = -1
- 否则: sq_Dichotomy_Search0 = key数组下标
- */
- int sq_Dichotomy_Search0(int array[],int n,int key)
- ...{
- int low,high,mid;
- low = 0;
- high = n - 1;
- while(low<=high)
- ...{
- mid = (high+low)/2;
- if(array[mid] == key)
- return(mid);
- /**//*key>array[mid] 表明要求查找的值在[mid+1,high]*/
- /**//*否则,在[low,mid-1]*/
- if(key > array[mid])
- low = mid + 1;
- else
- high = mid - 1;
- }
- return(-1);
- }
- /**//*
- 有序数组插值查找算法函数sq_Dichotomy_Search1<用数组实现>
- (插值查找算法是二分查找算法的改进)
- 参数描述:
- int array[] :被查找数组
- int n :被查找数组元素个数
- int key :被查找的关键值
- 返回值:
- 如果没有找到: sq_Dichotomy_Search1 = -1
- 否则: sq_Dichotomy_Search1 = key数组下标
- */
- int sq_Dichotomy_Search1(int array[],int n,int key)
- ...{
- int low,high, //二分数组的上,下标
- pos; //查找码的大致(估算)位置
- low = 0;
- high = n-1;
- while(low <= high)
- ...{
- pos = (key-array[low])/(array[high]-array[low])*(high-low)+low;
- /**//*找到关键值,中途退出*/
- if(key == array[pos])
- return(pos);
- if(key > array[pos])
- low = pos + 1;
- else
- high = pos - 1;
- }
- /**//*没有找到,返回-1*/
- return(-1);
- }
- //------------------------------数组实现部分----------------------------------
- //------------------------------链表实现部分----------------------------------
- /**//*
- 无序链表顺序查找算法函数nlk_Order_Serach<用链表实现>
- [查找思想:遍历链表的所有节点]
- 参数描述:
- Node *head :被查找链表的首指针
- int key :被查找的关键值
- 返回值:
- 如果没有找到: nlk_Order_Serach = NULL
- 否则: nlk_Order_Serach = 键值为key的节点的指针
- */
- Node *nlk_Order_Serach(Node *head,int key)
- ...{
- for(;head!=NULL && head->data != key;head = head->link);
- return(head);
- }
- /**//*
- 有序链表顺序查找算法函数lk_Order_Serach<用链表实现>
- [查找思想:依次遍历链表的节点,发现节点不在key的范围时提前结束查找]
- 参数描述:
- Node *head :被查找链表的首指针
- int key :被查找的关键值
- 返回值:
- 如果没有找到: lk_Order_Serach = NULL
- 否则: lk_Order_Serach = 键值为key的节点的指针
- */
- Node *lk_Order_Search(Node *head,int key)
- ...{
- for(;head!=NULL && head->data < key;head=head->link);
- /**//*当遍历指针为NULL或没有找到键值为key的节点,返回NULL(表明没有找到)*/
- /**//*否则,返回head(表明已经找到)*/
- return(head==NULL || head->data != key ? NULL : head);
- }
- /**//*
- 有序链表动态查找算法函数lk_Dynamic_Search<用链表实现>
- [查找思想:依次遍历链表的节点,发现节点不在key的范围时提前结束查找]
- 参数描述:
- Node *head: 被查找链表的首指针
- Node **p; 键值为key的节点的前驱指针(回传参数)
- Node **q: 键值为key的节点指针(回传参数)
- int key : 被查找的关键值
- 注意:
- 当 *p == NULL 且 *q != NULL,链表的首节点键值为key
- 当 *p != NULL 且 *q != NULL,链表的中间(非首,尾)节点键值为key
- 当 *p != NULL 且 *q == NULL,链表的尾节点键值为key
- 当 *p == NULL 且 *q == NULL,链表是空链表
- */
- void lk_Dynamic_Search(Node *head,Node **p,Node **q,int key)
- ...{
- Node *pre,*cur;
- pre = NULL;
- cur = head;
- for(;cur != NULL && cur->data < key;pre = cur,cur = cur->link)
- *p = pre;
- *q = cur;
- }
- /**//*
- 有序链表动态插入算法函数lk_Dynamic_Insert<用链表实现>
- 参数描述:
- Node *head: 被插入链表的首指针
- int key : 被插入的关键值
- 返回值:
- lk_Dynamic_Search = 插入键值为key的节点后的链表首指针
- */
- Node *lk_Dynamic_Insert(Node *head,int key)
- ...{
- Node
- *x, //插入节点的前驱节点
- *y, //插入节点的后续节点
- *p; //插入的节点
- p = (Node *)malloc(sizeof(Node));
- p->data = key;
- p->link = NULL;
- lk_Dynamic_Search(head,&x,&y,key);
- if(x==NULL)
- ...{
- p->link = x;
- head = p;
- }
- else
- ...{
- p->link = x->link;
- x->link = p;
- }
- ListLinkTable(head,"插入节点");
- return(head);
- }
- /**//*
- 有序链表动态删除算法函数lk_Dynamic_Delete<用链表实现>
- 参数描述:
- Node *head: 被删除链表的首指针
- int key : 被删除的关键值
- 返回值:
- lk_Dynamic_Delete = 删除键值为key的节点后的链表首指针
- */
- Node *lk_Dynamic_Delete(Node *head,int key)
- ...{
- Node *x, //删除节点的前驱节点
- *y; //删除的节点
- lk_Dynamic_Search(head,&x,&y,key);
- if(x==NULL)
- /**//*因为x=NLLL时,y指向首指针*/
- head = y->link;
- else
- x->link = y->link;
- free(y);
- ListLinkTable(head,"删除节点");
- return(head);
- }
- //------------------------------链表实现部分----------------------------------
- int main(int argc, char* argv[])
- ...{
- Node *head;
- //Node *p,*x,*y;
- int KEY;
- int count,i;
- //int result;
- KEY = 11;
- //PrintArrayValue(TestArray2,DEFAULT_ARRAY_SIZE,"原始");
- //result = sq_Dichotomy_Search1(TestArray2,DEFAULT_ARRAY_SIZE,KEY);
- //printf("查找结果是:数组[%d] = %d ",result,TestArray2[result]);
- head = CreateLinkTable(DEFAULT_ARRAY_SIZE,TestArray2);
- ListLinkTable(head,"原始");
- /**//*
- p = lk_Order_Search(head,KEY);
- if(p==NULL)
- printf(" 查找结果是:指定链表中没有[数据域 = %d]的节点! ",KEY);
- else
- printf(" 查找结果是:节点.Data = %d 节点.Link = %d 节点.Addr = %d ",p->data,p->link,p);
- */
- printf("输入插入节点的个数: ");
- scanf("%d",&count);
- for(i=0;i<count;i++)
- ...{
- printf("输入插入节点的数据域: ");
- scanf("%d",&KEY);
- lk_Dynamic_Insert(head,KEY);
- }
- do
- ...{
- printf("输入删除节点的数据域: ");
- scanf("%d",&KEY);
- lk_Dynamic_Delete(head,KEY);
- }while(head!=NULL);
- printf(" 应用程序正在运行...... ");
- return 0;
- }
发表评论
-
Oracle中的临时表用法汇总(转)
2008-02-29 10:34 21051.语法在Oracle中,可以创建以下两种临时表:1)会话特有 ... -
全方位介绍Oracle数据库中的回滚段
2008-01-08 11:27 4385本文分为以下几个部分: * 回滚段的作用 * 回滚段的类型 ... -
PLSQL单行函数和组函数详解(转)
2007-12-07 14:48 1838PL/SQL单行函数和组函数详解 函数是一种有零个 ... -
二叉树创建及遍历算法(递归及非递归)(转)
2007-10-13 17:30 8212java 代码 //二叉树处理头文件 ... -
使用数据结构实现计算器功能-java
2007-10-12 13:09 2869java 代码 package cacu; ... -
链表之堆栈的实现
2007-10-12 12:59 2082java 代码 /** * ... -
链表之队列的实现
2007-10-12 12:52 2707java 代码 /** * ... -
链表的实现
2007-10-12 12:45 1633java 代码 /** * ... -
线性表之队列的实现
2007-10-12 12:42 1966java 代码 /** * Que ... -
线性排序的实现
2007-10-12 12:38 1675java 代码 /** * 线性表 ... -
线性表之堆栈的实现
2007-10-12 08:02 1906java 代码 /** ...
相关推荐
以下是四种常见的查找算法:顺序查找、二分查找、插值查找和动态查找。 顺序查找 顺序查找是一种最简单的查找算法,它的实现方式是从数组或链表的第一个元素开始,逐个比较元素直到找到目标元素或达到数组或链表的...
根据不同的实现方式和查找策略,查找算法可以分为顺序查找、二分查找、插值查找、动态查找等多种类型。 一、顺序查找算法 顺序查找算法是一种简单的查找算法,它的实现方式是从数组或链表的第一个元素开始,逐个...
这里我们将深入探讨三种不同的查找算法:顺序查找、折半查找(也称为二分查找)以及插值查找。这些算法在不同的场景下各有优势,了解并熟练掌握它们对于优化程序性能至关重要。 **顺序查找** 顺序查找是最基础的...
**各种查找算法**:斐波那契查找、插值查找、二分查找、顺序查找分别适用于不同场景,具有不同的时间复杂度。 29-39. **各种排序算法**:包括基数排序、桶排序、计数排序、堆排序、快速排序、归并排序、希尔排序、...
5.4.2 链表结构中的查找算法 148 5.4.3 树结构中的查找算法 151 5.4.4 图结构中的查找算法 152 5.5 小结 153 第6章 基本数学问题 154 6.1 判断闰年 154 6.2 多项式计算 156 6.2.1 —维多项式求值 156 6.2.2...
- **二分查找**:时间复杂度 O(log n)。 - **插值查找**:根据元素之间的数值关系进行查找。 - **分块查找**:将有序表划分为若干个块,每个块内部再进行查找。 - **动态查找表**:动态变化的查找表,支持插入和...
- 顺序查找和二分查找的原理及其适用场景。 - 插值查找和斐波那契查找等高级查找算法的介绍。 3. **递归与动态规划(Recursion and Dynamic Programming)** - 递归的基本概念及其在解决数学问题中的应用。 - ...
查找算法包括顺序查找、二分查找、哈希表查找等,这些在数据库系统、搜索引擎和各种信息检索应用中都有广泛应用。此外,还探讨了关联数组、B树和B+树等高效数据结构,这些在现代数据库系统中扮演着关键角色。 综合...
有序数组的二分查找 插值查找 模糊二分查找 散列表 支持插入、删除、查找的散列表 分离链接法处理散列表中的冲突 线性探查法处理散列表中的冲突 二叉树 二叉树的前、中、后序以及层次遍历 支持插入、删除、查找的...
- **查找算法**:如顺序查找、二分查找等。 - **数值计算算法**:涉及插值、方程求解等。 - **字符串处理算法**:如字符串匹配等。 - **数据压缩算法**:如Huffman编码等。 - **递归算法**:通过递归解决问题的方法...
查找部分则涉及顺序查找、二分查找、哈希查找等,并讨论了不同查找策略的适用场景和优缺点。此外,还介绍了一些高级主题,如外部排序和多关键字排序。 通过阅读这三卷,读者将能全面掌握计算机程序设计的核心技巧,...
并根据自己的理解重新进行了整理本文持续更新中本文收录于一、计算机基础1、数据结构(1)基本数据结构数据结构基本概念(时间复杂度和空间复杂度的计算方法)数组链表集合队列栈关联数组跳表倒排索引BitSet(2)树...
静态查找表是数据查找的基础,包括顺序查找、二分查找、插值查找和分块查找等方法。散列函数用于将数据映射到特定位置,常见的有直接地址法、除留余数法等,散列碰撞通过线性探测、二次探测或再散列解决。 线性结构...
我的算法我的算法学习笔记数据结构叠放队列链表BinarySearchTree 组地图eep 段树特里联合查找AVL树红黑树哈希表图形演算法分类气泡分选选择排序插入排序贝壳分类快速分类合并排序堆排序计数排序桶分类基数排序搜索二...
二分查找、插值查找、斐波那契查找等则是提高数据查找效率的有效手段。 6. **文件结构**:在大型系统中,数据通常存储在磁盘上,如何高效地读写数据是文件结构研究的主要内容。顺序文件、索引顺序文件、直接存取...
- **常用算法**:掌握常用的排序算法(如冒泡排序、快速排序)、查找算法(如顺序查找、二分查找)、数值计算算法、字符串处理算法、数据压缩算法、递归算法以及图的相关算法。理解算法与数据结构之间的关系,掌握...
顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找 系统设计题 LeetCode 常见题目标签 其他 题解(剑指 Offer) 模板 题目:**剑指 Offer 29. 顺时针打印矩阵** 题目描述:输入一个矩阵,...