查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
来源:互联网 发布:手机挂机赚钱软件 编辑:程序博客网 时间:2024/04/30 14:47
-
-
-
- #include "stdafx.h"
- #include "LinkTable.h"
- #define MAX_KEY 500
-
-
-
-
-
-
-
-
-
-
-
-
- int nsq_Order_Search(int array[],int n,int key)
- ...{
- int i;
- array[n] = key;
-
- for(i=0;key!=array[i];i++);
- return(i<n?i:-1);
- }
-
-
-
-
-
-
-
-
-
-
- int sq_Order_Search(int array[],int n,int key)
- ...{
- int i;
- array[n] = MAX_KEY;
-
- for(i=0;key>array[i];i++);
- if(i<n && array[i] == key)
- return(i);
- else
- return(-1);
- }
-
-
-
-
-
-
-
-
-
-
- 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);
-
-
- if(key > array[mid])
- low = mid + 1;
- else
- high = mid - 1;
- }
- return(-1);
- }
-
-
-
-
-
-
-
-
-
-
-
- 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;
- }
-
- return(-1);
- }
-
-
-
-
-
-
-
-
-
-
-
-
- Node *nlk_Order_Serach(Node *head,int key)
- ...{
- for(;head!=NULL && head->data != key;head = head->link);
- return(head);
- }
-
-
-
-
-
-
-
-
-
-
- Node *lk_Order_Search(Node *head,int key)
- ...{
- for(;head!=NULL && head->data < key;head=head->link);
-
-
- return(head==NULL || head->data != key ? NULL : head);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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;
- }
-
-
-
-
-
-
-
-
- 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);
- }
-
-
-
-
-
-
-
-
- Node *lk_Dynamic_Delete(Node *head,int key)
- ...{
- Node *x,
- *y;
- lk_Dynamic_Search(head,&x,&y,key);
- if(x==NULL)
-
- head = y->link;
- else
- x->link = y->link;
- free(y);
- ListLinkTable(head,"删除节点");
- return(head);
- }
-
- int main(int argc, char* argv[])
- ...{
- Node *head;
-
- int KEY;
- int count,i;
-
- KEY = 11;
-
-
-
- head = CreateLinkTable(DEFAULT_ARRAY_SIZE,TestArray2);
- ListLinkTable(head,"原始");
-
-
-
-
-
-
-
- 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;
- }