数据实验九 检索
来源:互联网 发布:解压缩软件美化版 编辑:程序博客网 时间:2024/04/19 20:24
头文件一
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define MAX 500000int readData(int a[],int n,char *f ){ FILE *fp; int i; fp=fopen(f,"r"); if(fp==NULL) return 0; else { for(i=0;i<n&&!feof(fp);i++) fscanf(fp,"%d",&a[i]); fclose(fp); return i; }}void saveData(int a[],int n,char *f ){ FILE *fp; fp=fopen(f,"w"); if(fp==NULL) printf("文件建立失败!"); else { for(int i=0;i<n;i++) { if(i%10==0) fprintf(fp,"%c",'\n'); fprintf(fp,"%8d",a[i]); } fclose(fp); }}void output(int a[],int n){ printf("\n数组的内容是:\n"); for(int i=0; i<n; i++) { if(i%10==0) puts(""); printf("%7d",a[i]); } puts("");}
基于数组查询
//数组查找#include"ArrayIo.h"#define N 10000int a[N],num;int seqsearch(int key){ int ans=-1; for(int i=0;i<num;i++){ if(a[i]==key){ ans=i; break; } } return ans;}int main(){ int x,pos; num=readData(a,N,"data1.txt"); printf("请输入要查找的整数:\n"); scanf("%d",&x); pos=seqsearch(x); if(pos==-1) printf("查找失败"); else printf("a[%d]=%d\n",pos,x); return 0;}
头文件二
#include <stdio.h>#include <stdlib.h>/**************************************//* 链表实现的头文件,文件名slnklist.h *//**************************************/typedef int datatype;typedef struct link_node{ datatype info; struct link_node *next;} node;typedef node *linklist;/******************************************//*函数名称:creatbystack() *//*函数功能:头插法建立带头结点的单链表 *//******************************************/linklist creatbystack(){ linklist head,s; datatype x; head=(linklist)malloc(sizeof(node)); head->next=NULL; printf("请输入整数序列(空格分开,以0结束):\n"); scanf("%d",&x); while(x!=0) { s=(linklist)malloc(sizeof(node)); s->info=x; s->next=head->next; head->next=s; scanf("%d",&x); } return head;}/***************************************//*函数名称:creatbyqueue() *//*函数功能:尾插法建立带头结点的单链表 *//***************************************/linklist creatbyqueue(){ linklist head,r,s; datatype x; head=r=(linklist)malloc(sizeof(node)); head->next=NULL; printf("请输入整数序列(空格分开,以0结束):\n"); scanf("%d",&x); while(x!=0) { s=(linklist)malloc(sizeof(node)); s->info=x; r->next=s; r=s; scanf("%d",&x); } r->next=NULL; return head;}/**********************************//*函数名称:print() *//*函数功能:输出带头结点的单链表 *//**********************************/void print(linklist head){ linklist p; int i=0; p=head->next; printf("List is:\n"); while(p) { printf("%7d",p->info); i++; if(i%10==0) puts(""); p=p->next; } puts("");}/******************************************//*函数名称:creatLink() *//*函数功能:从文件中读入n个数据构成单链表 *//******************************************/linklist creatLink(char *f, int n){ FILE *fp; linklist s,head,r; head=r=(linklist)malloc(sizeof(node)); head->next=NULL; fp=fopen(f,"r"); if(fp==NULL) return head; else { for(int i=0;i<n;i++) { s=(linklist)malloc(sizeof(node)); fscanf(fp,"%d",&(s->info)); r->next=s; r=s; } r->next=NULL; fclose(fp); return head; }}/**********************************//*函数名称:delList() *//*函数功能:释放带头结点的单链表 *//**********************************/void delList(linklist head){ linklist p=head; while(p) { head=p->next; free(p); p=head; }}
基于链表查询
#include"slnklist.h"#define N 100linklist seqsearch(linklist head,int key){ linklist p=head->next; while(p&&p->info!=key) p=p->next; return p;}int main(){ int x; linklist head,pos; head=creatLink("data1.txt",N); print(head); printf("请输入要查找的整数:"); scanf("%d",&x); pos=seqsearch(head,x); if(pos==NULL) printf("查找失败!\n"); else printf("查找成功!%d\n",pos->info); delList(head);}
有序数组二分查找
/*二分查找算法*/#include"ArrayIo.h"#define N 200int binSearch(int a[],int n,int key){ int pos=-1; int left=0,right=n-1; int mid=(left+right)>>1; while(left<right) { if(key>a[mid]) left=mid+1; else right=mid; mid=(left+right)>>1; } if(a[mid]==key) pos=mid; return pos;}int main(){ int a[N],n,x,pos; n=readData(a,N,"data2.txt"); printf("请输入要查找的整数:"); scanf("%d",&x); pos=binSearch(a,n,x); if(pos==-1) printf("查找失败"); else printf("a[%d]=%d\n",pos,x); return 0;}
二分查找
/*基于数组的二分查找递归算法*/#include "ArrayIo.h"#define N 10000int binSearch(int a[],int low,int high,int key){ int ans; int mid=(low+high)>>1; if(low>high) return -1; if(a[mid]==key) return mid; if(key>a[mid]) return binSearch(a,mid+1,high,key); return binSearch(a,low,mid,key);}int main(){ int a[N],n,x,pos; n=readData(a,N,"data2.txt"); printf("请输入要查找的整数:"); scanf("%d",&x); pos=binSearch(a,0,n-1,x); if(pos==-1) printf("查找失败"); else printf("a[%d]=%d\n",pos,x); return 0;}
头文件三
/**************************************//* 二叉排序树用的头文件 *//* 文件名:bstree.h *//**************************************/#include<stdio.h>#include<stdlib.h>typedef struct node{ int key; struct node1 *lchild,*rchild;} bsnode;typedef bsnode *bstree;/*---中序遍历二叉排序树----*/void inorder(bstree t){ if(t) { inorder(t->lchild); printf("%8d",t->key); inorder(t->rchild); }}
#include"Arrayio.h"#include"bstree.h"#define N 100/*根据输入的结点序列,建立一棵二叉排序树,并返回根结点的地址*/bstree creatBstree(int a[],int n){ }int main(){ int n,a[N]; bstree p,t; n=readData(a,N,"data1.txt"); output(a,n); t=creatBstree(a,n); printf("中序遍历:\n"); inorder(t); return 0;}
0 0
- 数据实验九 检索
- 实验六 数据检索
- SQL SERVER实验-- 数据检索
- 实验九
- 实验九
- 数据检索--区域检索
- 数据检索
- 数据检索
- 检索数据
- 实验九 静态路由实验
- 信息存储与检索实验
- 实验一 中文数据库检索
- 语音关键词检索实验小结
- 第九章实验九
- 王爽 汇编语言 实验九
- C++ 实验九
- C++ 实验九
- 实验九 查找
- 天空大战项目1:项目的演示
- linux部署项目问题记录
- linux文件IO操作
- Compass学习指南
- ros::spin() 和 ros::spinOnce() 区别及详解
- 数据实验九 检索
- activity横竖屏切换梳理
- TEMPORARY Tablespaces and TEMPFILES
- C++协程库coroutine使用指南
- Android设计模式 观察者模式之eventbus
- mysql 查询练习
- android 系统源码简单的编译过程
- 各种编程语言的代码覆盖率工具汇总
- AndroidStudio常用快捷键