查找--静态查找与动态查找
来源:互联网 发布:gta5精简优化版 编辑:程序博客网 时间:2024/06/05 04:44
静态查找:
1.查询某个特定的数据元素是否在查找表中;
2.检索某个特定的数据元素的各种属性。
动态查找:
1.在查找表中插入一个元素;
2.从查找表中删去某个数据元素。
(需要借助于顺序表)
//SeqList.h#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_Capacity(SeqList* list);void SeqList_Clear(SeqList* list);int SeqList_Insert(SeqList* list,SeqListNode* node,int pos);SeqListNode* SeqList_Get(SeqList* list,int pos);SeqListNode* SeqList_Delete(SeqList* list,int pos);#endif
//SeqList.c#include "SeqList.h"#include <malloc.h>typedef unsigned int TSeqListNode;typedef struct _tag_SeqList{int capacity;int length;TSeqListNode* node;}TSeqList;SeqList* SeqList_Create(int capacity){TSeqList* ret = NULL;if(capacity > 0){ret = (TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)*capacity);}if(ret != NULL){ret->capacity = capacity;ret->length = 0;ret->node = (TSeqListNode*)(ret+1);}return ret;}void SeqList_Destroy(SeqList* list){free(list);}int SeqList_Length(SeqList* list){int ret = -1;TSeqList* sList = (TSeqList*)list;if(sList!=NULL){ret = sList->length;}return ret;}int SeqList_Capacity(SeqList* list){int ret = -1;TSeqList* sList = (TSeqList*)list;if(sList != NULL){ret = sList->capacity;}return ret;}void SeqList_Clear(SeqList* list){TSeqList* sList = (TSeqList*)list;if(sList != NULL){sList->length = 0;}}int SeqList_Insert(SeqList* list,SeqListNode* node,int pos){int ret = 0;TSeqList* sList = (TSeqList*)list;ret = (sList != NULL)&&(node != NULL)&&(pos >= 0)&&(sList->length+1 <= sList->capacity);int i = 0;if( ret ){if(pos>sList->length){pos = sList->length;}for(i=sList->length;i>pos;i--){sList->node[i] = sList->node[i-1];}sList->node[i] = (TSeqListNode)node;sList->length++;}return ret;}SeqListNode* SeqList_Get(SeqList* list,int pos){TSeqList* sList = (TSeqList*)list;TSeqListNode* ret = NULL;if((sList!=NULL)&&(pos>=0)&&(pos<sList->length)){ret = (TSeqListNode*)sList->node[pos];}return ret;}SeqListNode* SeqList_Delete(SeqList* list,int pos){TSeqList* sList = (TSeqList*)list;TSeqListNode* ret = SeqList_Get(list,pos);int i = 0;if(ret != NULL){for(i=pos;i<sList->length;i++){sList->node[i] = sList->node[i+1];}sList->length--;}return ret;}
//main.c#include <stdio.h>#include <stdlib.h>#include <time.h> #include "SeqList.h"/* run this program using the console pauser or add your own getch, system("pause") or input loop */#define SIZE 20void print_array(int a[],int len){int i = 0;for(i=0;i<len;i++){printf("%d ",a[i]);}printf("\n");}int static_search(int a[],int len,int key){int ret = -1;int i = 0;for(i=0;i<len;i++){if(key == a[i]){ret = i;break;}}return ret;}void static_test(){int array[SIZE] = {0};int i = 0;int key = 0;int index = -1;srand((unsigned int)time(NULL));for(i=0;i<SIZE;i++){array[i] = rand()%100;}key = rand()%100;printf("Static Search Demo!\n");printf("key : %d\n",key);printf("ALL :\n");print_array(array,SIZE);printf("\n");index = static_search(array,SIZE,key);if(index >= 0){printf("Success,a[%d] = %d\n",index,key);}else{printf("failed!\n");}}//------------------------------------------void print_list(SeqList* list){int i = 0;for(i=0;i<SeqList_Length(list);i++){printf("%d ",(int)SeqList_Get(list,i));}printf("\n");}int dynamic_search(SeqList* list,int key){int ret = -1;int i = 0;for(i=0;i<SeqList_Length(list);i++){if((int)SeqList_Get(list,i)==key){ret = i;SeqList_Delete(list,i);break;}}return ret;}void dynamic_test(){SeqList* list = SeqList_Create(SIZE);int i = 0;int key = 0;int index = 0;srand((unsigned int)time(NULL));for(i=0;i<SIZE;i++){SeqList_Insert(list,(SeqListNode*)(rand()%100),i);}printf("Dynamic Search Demo!\n");key = rand()%100;printf("key : %d\n",key);printf("ALL:\n");print_list(list);index = dynamic_search(list,key);if(index >= 0){printf("Success,List[%d] = %d\n",index,key);}else{printf("failed!\n");}print_list(list);SeqList_Destroy(list);}//------------------------------------------int main(int argc, char *argv[]) {static_test();dynamic_test();return 0;}
1静态查找的改进:
//FindPro.c #include <stdio.h>#include <stdlib.h>#include <time.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */#define SIZE 20void print_array(int a[],int begin,int end){int i = 0;for(i=begin;i<=end;i++){printf("%d,",a[i]);}printf("\n");}int array_search(int a[],int len,int key){int ret = len;a[0] = key;while(a[ret]!=key) //与for()...if()...相比,少了一次比较的过程 {ret--;}return ret;}int main(int argc, char *argv[]) {int array[SIZE+1] = {0};int i = 0;int key = 0;int index = 0;srand((unsigned int)time(NULL));for(i=1;i<=SIZE;i++){array[i] = rand()%100;}key = rand()%100;printf("key = %d\n",key);printf("ALL:\n");print_array(array,1,SIZE);index = array_search(array,SIZE+1,key);if(index > 0){printf("Success! array[%d] = %d\n",index,key);}else{printf("Failure!\n");}return 0;}
1
1 0
- 查找--静态查找与动态查找
- 动态查找表与静态查找表
- 静态查找表与动态查找表
- 静态查找与动态查找结构
- 静态查找表与动态查找表
- 静态查找和动态查找
- 面试-查找(静态查找,动态查找)
- 查找算法(静态查找)
- 查找之静态查找
- 查找(1)--静态查找
- 查找---静态查找
- 查找(1)--静态查找
- 查找:静态查找表
- 静态查找方法(顺序查找与二分查找)
- 二叉排序树查找-动态查找
- 查找(2)--动态查找
- 查找---动态查找
- 静态查找
- POJ 3421X-factor Chains【分解质因子+组合数学】
- 3D Touch
- 总结一下java中的位操作,运算优先级
- ApachePOI导出exce,设置单元格风格的属性和设置字体风格的属性的两个工具类,POI宽度和excel 像素转换
- 如何求两个矩形相交面积
- 查找--静态查找与动态查找
- MTK之UART串口收发数据
- SDAU练习二1011
- 不用导入SDK就可实现导航--URI方式跳转到各类地图进行导航
- 朴素贝叶斯的实际应用
- 数据结构,堆的学习
- android文件操作
- bzoj 1067 [SCOI2007]降雨量
- nyoj27 水池数目