以下关于线性表的说法不正确的是(

以下关于线性表的说法不正确的是(
以下关于线性表的说法不正确的是(

数据结构线性表2答案

习题二 一、选择题 1.在一个长度为n的顺序表中删除第i个元素(0<i

01顺序结构的线性表插入删除查找

//* * * * * * * * * * * * * * * * * * * * * * * //PROGRAM NAME :顺序结构的线性表 * //CONTENT :插入,删除,查找 * //* * * * * * * * * * * * * * * * * * * * * * * #include #include #include #define MAX 30 //定义线性表的最大长度 enum BOOL{False,True}; //定义BOOL型 typedef struct{ char elem[MAX]; //线性表 int last; //last指示当前线性表的长度 }sqlisttp; void initial(sqlisttp &); //初始化线性表 BOOL insert(sqlisttp &,int,char); //在线性表中插入元素 BOOL del(sqlisttp&,int,char &); //在线性表中删除元素 int locate(sqlisttp,char); //在线性表中定位元素 void print(sqlisttp); //显示线性表中所有元素 void main() {sqlisttp S; //S为一线性表 int loc,flag=1; char j,ch; BOOL temp; textbackground(3); //设置屏幕颜色 textcolor(15); clrscr(); //---------------------------程序解说-------------------------- printf("本程序用来实现顺序结构的线性表。\n"); printf("可以实现查找、插入、删除等操作。\n"); //------------------------------------------------------------- initial(S); //初始化线性表 while(flag) { printf("请选择:\n"); printf("1.显示所有元素\n"); printf("2.插入一个元素\n"); printf("3.删除一个元素\n"); printf("4.查找一个元素\n"); printf("5.退出程序 \n"); scanf(" %c",&j); switch(j) {case '1':print(S); break; //显示所有元素 case '2':{printf("请输入要插入的元素(一个字符)和插入位置:\n"); printf("格式:字符,位置;例如:a,2\n"); scanf(" %c,%d",&ch,&loc); //输入要插入的元素和插入的位置

数据结构 第九章 查找 作业及答案

第九章查找 一、填空题 1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是。 2. 线性有序表(a 1,a 2 ,a 3 ,…,a 256 )是从小到大排列的,对一个给定的值k,用二分法检索 表中与k相等的元素,在查找不成功的情况下,最多需要检索次。设有100个结点,用二分法查找时,最大比较次数是。 3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两 次查找成功的结点数为 2 ;比较四次查找成功的结点数为 ,其下标从小到大依次是 ____,平均查找长度为。 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素比较大小。 5. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。 6. 散列法存储的基本思想是由决定数据的存储地址。 7. 有一个表长为m的散列表,初始状态为空,现将n(n

掌握线性表的基本操作:插入、删除、查找在顺序存储结构上的实现。

洛阳理工学院实验报告

附:源程序: #include #define ERROR 0 #define OK 1 #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE]; int last; }SeqList; void insert(SeqList *L) { int elem;

int i,j,k,t; int flag=1; printf("请输入数据:\n"); while(flag) { scanf("%d",&elem); if (elem==-1) break; if (L->last>MAXSIZE-1) { printf("顺序表已满!\n"); return; } L->last++; L->elem[L->last]=elem; } k=L->last; for(j=0;jelem[i]>L->elem[i+1]) {t=L->elem[i];L->elem[i]=L->elem[i+1];L->elem[i+1]=t;} } int DelList(SeqList *L,int key) { int i; int k; if (L->last<0) { return ERROR;

} for (i=0;i<=L->last;i++) { if (L->elem[i]==key) { for (k=i;klast;k++) L->elem[k]=L->elem[k+1]; L->last--; return OK; } } return ERROR; } void printSeq(SeqList *L) { int i; if (L->last<0) { printf("没有任何元素!\n"); } for (i=0;i<=L->last;i++) { printf("%4d",L->elem[i]); if ((i+1)%8==0) { printf("\n"); } } printf("\n");

数据结构练习附答案

一、单项选择题 1.逻辑关系是指数据元素间的() A.类型 B.存储方式 C.结构 D.数据项 2.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构 为( ) A.顺序表 B.用头指针表示的单循环链表 C. 用尾指针表示的单循环链表 D. 单链表 3.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear 为队尾指针,则执行出队操作后其头指针front值为() A.front=front+1 B.front= (front+1)%(m-1) C.front=(front-1)%m D.front=(fro nt+1)%m 4.在具有n个单元的顺序存储的循环队列中,假定front和rear分别 为队头指针和队尾指针,则判断队满的条件为( )。 A.rear%n==front B.(front+l)%n==rear C.rear%n-1==front D.(rear+l)%n==front 5.在具有n个单元的顺序存储的循环队列中,假定front和rear分别 为队头指针和队尾指针,则判断队空的条件为( )。 A.rear%n==front B.front+l=rear C.rear==front D.(rear+l)%n=front 6.已知一颗二叉树上有92个叶子结点,则它有____个度为2的结点。 ( ) A. 90 B. 91 C. 92 D. 93 7.在一棵非空二叉树的中序遍历序列中,根结点的右边_____。 A. 只有右子树上的所有结点 B. 只有右子树上的部分结点 C. 只有左子树上的所有结点 D. 只有左子树上的部分结点 8.有n条边的无向图的邻接表存储法中,链表中结点的个数是( )个。 A. n B. 2n C. n/2 D. n*n 9.判断有向图是否存在回路,除了可利用拓扑排序方法外,还可以利 用()。 A. 求关键路径的方法 B.求最短路径的方法 C. 深度优先遍历算法 D.广度优先遍历算法 10.对线性表进行二分查找时,要求线性表必须( )。

第9章 查找练习题及答案

第九章查找 单项选择题 1.顺序查找法适合于存储结构为的线性表。 A. 散列存储 B. 顺序存储或链接存储 C. 压缩存储 D. 索引存储 2.对线性表进行二分查找时,要求线性表必须。 A. 以顺序方式存储 B. 以顺序方式存储,且结点按关键字有序排列 C. 以链接方式存储 D. 以链接方式存储,且结点按关键字有序排列 3.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为。 A. n B. n/2 C. (n+1)/2 D. (n-1)/2 4.采用二分查找方法查找长度为n的线性表时,每个元素的平均查找长度为。 A. O(n2) B. O(nlog2n) C. O(n) D. O (logn) 5.二分查找和二叉排序树的时间性能。 A. 相同 B. 不相同 6.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82的结点时,次比较后查找成功。 A. 1 B. 2 C. 4 D. 8 7.设哈希表长m=14,哈希函数H(key)=key%11。表中有4个结点: addr(15)=4 addr(38)=5 addr(61)=6 addr(84)=7 其余地址为空,如用二次探测再散列处理冲突,关键字为49的结点的地址是。 A. 8 B. 3 C. 5 D. 9 8.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为。 A. 35/12 B. 37/12 C. 39/12 D. 43/12 9.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分个结点最佳地。 A. 10 B. 25 C. 6 D. 625 10.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用查找方法。 A. 分块 B. 顺序 C. 二分 D. 散列 填空题 1.顺序查找法的平均查找长度为;二分查找法的平均查找长度为;分块查找法(以顺序查找确定块)的平均查找长度为;分块查找法(以二分查找确定块)的平均查找长度为;哈希表查找法采用链接法处理冲突时的平均查找长度为。 2.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。 3.二分查找的存储结构仅限于,且是。 4.在分块查找方法中,首先查找,然后再查找相应的。 5.长度为255的表,采用分块查找法,每块的最佳长度是。 6.在散列函数H(key)=key%p中,p应取。 7.假设在有序线性表A[1..20]上进行二分查找,则比较一次查找成功的结点数为,则

数据结构期末考试试题和标准答案及评分标准

《数据结构》试题(A卷) (考试时间: 90分钟) 一、单项选择题(本大题共15小题,每小题2分,共30分) (每题只有一个选项是正确的,将答案填写在括号内,错选、多选不得分) 1.()是组成数据的基本单位,是一个数据整体中相对独立的单元。 A.数据 B.数据元素 C.数据对象 D.数据结构 2.算法计算量的大小称为算法的()。 A.效率 B.复杂度 C.数据元素之间的关系 D.数据的存储方法 3.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入或删除运算,则采用以下()方式最节省时间。 A.链式存储 B. 索引存储 C.顺序存储 D.散列存储 4.下述哪一条是顺序存储结构的优点?() A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示 5.在一个单链表中,若删除p所指结点的后续结点,则执行()。 A.p->next=p->next->next B.p->next=p->next C.p=p->next;p->next=p->next->next D.p=p->next->next 6.带头结点的单链表head为空的判定条件是()。 A.head==NULL B.head->next==NULL C.head->next==head D.head!==NULL 7.非空的循环单链表head的尾结点(由p所指向)满足()。 A.p->head==NULL B.p==NULL C.p->next==head D.p==head 8.下面关于线性表的叙述中,错误的是哪一个?() A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链式存储,不必占用一片连续的存储单元。 D.线性表采用链式存储,便于插入和删除操作。 9.队列操作的原则是()。 A.后进先出 B.先进先出 C.只能进行插入 D.只能进行删除 10.栈中允许进行插入和删除的一端称为()。 A.栈首 B.栈尾 C.栈顶 D.栈底 11.假设以数组A[n]存放循环队列的元素,其首尾指针分别为front和rear,则当前队列中的元素个数为()。 A.(rear-front+n)%n B. rear-front+1 C. (front-rear+n)%n D.(rear-front)%n 12.最大容量为n的循环队列,队尾指针是rear,队首指针是front,则队空的判断条件是( )。 A.(rear+1)%n==front B.rear==front C.rear+1==front D.(rear-1)%n==front 13.将一个十进制的数转换成二进制的数,可以使用以下一种称为()的数据结构。 A. 图 B. 树 C. 广义表 D. 栈 14. 把一棵树转换为二叉树后,这棵二叉树的形态是()。 A. 有2种 B. 有3种 C. 有4种 D. 唯一的 15.一棵左右子树均不空的二叉树在先序线索化后,其中空链域的个数是()。

数据结构-线性表输入,输出,插入,删除,查找

创建一个线性表实现输入,输出,插入,删除,定位。 (注意:不论在调用哪个函数前,都要先使L.elem=a,就是使指针elem回到数组a的首地址。) #include #include #include #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; //接下来ElemType代表的就是int typedef int Status; //Status也代表int int i,*p,*q; //p,q都是指针类型 ElemType e; typedef struct { ElemType *elem; //定义成指针类型//存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) }SqList; //***********************构建空的线性表*************************// Status InitList_Sq(SqList &L) //构建一个空的线性表L { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度为0 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } //**************************线性表输入函数*********************// void input(SqList &L) //输入函数 { scanf("%d",L.elem); //要先输入一个,不然一开始就是0,无法进行循环while(*L.elem) // 加*是因为elem是指针,加之后才代表值{ L.elem++; //输入后指针后移 L.length++; //表长加1 scanf("%d",L.elem); //循环中也要再输入 } } //**************************线性表打印函数********************// void print(SqList &L) //输出函数

数据结构作业五

1. 分别画出在线性表(a,b,c,d,e,f,g)中进行折半查找,以查关键字等于e、f和g的过程。 (1)查e Step 1: a b c d e f g ↑↑↑ low mid high de high=mid – 1; Step 3: a b c d e f g ↑ low/high mid e==e return(mid); (2)查f Step 1: a b c d e f g ↑↑↑ low mid high d ST.elem[0] ) BiSearch( ST, low, mid-1 ); if( ST.elem[mid] < ST.elem[0] ) BiSearch( ST, mid+1, high); } else return (mid); }

数据结构线性表单链表的查找、插入、删除

实验报告 课程名称数据结构 姓名 学号 专业班级 指导教师

目录 第二章线性表的查找、插入、删除 (1) 1.1顺序表的查找 (1) 1.2顺序表的插入 (3) 1.3顺序表的删除 (7) 单链表的建立、插入、删除 (10) 2.1 单链表的建立(尾插法) (10) 2.2 单链表的插入 (13) 2.3 单链表的删除 (17) 第三章栈 (24) 3.1链栈 (24) 3.2 顺序栈 (28) 3.3队列 (30) 3.4辉三角 (35) 第四章串 (23) 4.1字符串的建立 (23) 4.2顺序串的插入 (25)

1.线性表的查找、插入、删除 1.1顺序表的查找 程序: #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表为-1*/ }Seqlist; int Locate(Seqlist L,ElemType e)

/*在顺序表L中查找与e相等的元素,若L。elem[i]=e,则找到该元素,并返回i+1,若找不到,则返回-1*/ { int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=https://www.360docs.net/doc/b511478252.html,st)&&(L.elem[i]!=e)) /*顺序扫描表,直到找到值为e的元素,或扫描到表尾仍没找到*/ i++; if(i<=https://www.360docs.net/doc/b511478252.html,st) return (i+1); /*若找到值为e的元素,则返回其序号*/ else return(-1); /*若没找到,则返回空序号*/ } void main() { Seqlist l; int p,q,r; int i; printf("请输入线性标的长度:"); scanf("%d",&r); https://www.360docs.net/doc/b511478252.html,st=r-1; printf("请输入线性表的各元素值:\n"); for (i=0;i<=https://www.360docs.net/doc/b511478252.html,st;i++) {

第10章 查找

一、选择题 ( )7、下面关于二分查找的叙述正确的是。 A)表必须有序,表可以顺序方式存储,也可以链表方式存储; C)表必须有序,而且只能从小到大排列; B)表必须有序且表中数据必须是整型,实型或字符型; D)表必须有序,且表只能以顺序方式存储; ( ) 14.长度为12的有序表采用顺序存储结构,使用二分查找技术,在等概率情况下,查找成功时的平均查找长度是。 A. 37/12 B. 62/13 C. 39/12 D. 49/13 ( ) 14、折半查找法要求查找表中各元素的关键字必须是排列。 A)递增或递减 B)递增 C)递减 D)无序 ( ) 13、一棵7阶B-树的根结点及非根分支结点所包含的关键字的个数至少分别为A)1,3 B)2,4 C)3,5 D) 6,6 2、设有100个元素,用折半查找法进行查找时,在查找成功的情况下,最大比较次数是_____ 。 A.100 B.50 C.99 D.7 4、指出在顺序表{2、 5、7、10、14、15、18、23、35、41、52}中,用二分法查找12,需做多少次比较。 ______ A、2 B、3 C、4 D、5 6、从二叉排序树中查找一个元素时,其时间复杂度大致为________。 A、 O(n) B、 O(1) C、 O(log2n) D、 O(n2) 1.顺序查找法适合于存储结构为()的线性表。 (A)散列存储(B)顺序存储或链接存储(C)压缩存储(D)索引存储 2.对线性表进行二分查找时,要求线性表必须()。 (A)以顺序方式存储(B)以链接方式存储 (C)以顺序方式存储,且结点按关键字有序排序 (D)以链接方式存储,且结点按关键字有序排序 3.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为() (A)n (B)n/2(C)(n+1)/2(D)(n-1)/2 4.采用二分查找方法查找长度为n的线性表时,每个元素的平均查找长度为() (A)O(n2)(B)O(log2n)(C)O(n)(D)O(log2n) 5.二分查找和二叉排序树的时间性能()。 (A)相同? (B)不相同? (C)无法比较 6.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82的结点时,()次比较后查找成功。 (A)1(B)2(C)4(D)8 8.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找

数据结构-线性表输入-输出-插入-删除-查找

数据结构-线性表输入-输出-插入-删除-查找

创建一个线性表实现输入,输出,插入,删除,定位。 (注意:不论在调用哪个函数前,都要先使L.elem=a,就是使指针elem回到数组a的首地址。) #include #include #include #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; //接下来ElemType代表的就是int typedef int Status; //Status也代表int int i,*p,*q; //p,q都是指针类型 ElemType e; typedef struct { ElemType *elem; //定义成指针类型//存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) }SqList; //***********************构建空的线性表*************************// Status InitList_Sq(SqList &L) //构建一个空的线性表L { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度为0 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } //**************************线性表输入函数*********************// void input(SqList &L) //输入函数 { scanf("%d",L.elem); //要先输入一个,不然一开始就是0,无法进行循环while(*L.elem) // 加*是因为elem是指针,加之后才代表值{ L.elem++; //输入后指针后移 L.length++; //表长加1 scanf("%d",L.elem); //循环中也要再输入 } } //**************************线性表打印函数********************// void print(SqList &L) //输出函数

《数据结构》习题集:第9章查找(第1次更新2019-5)

第9章查找 一、选择题 1.顺序查找一个共有n个元素的线性表,其时间复杂度为(),折半查找一个具有n个元素的有序表,其时间复 杂度为()。【*,★】 A.O(n) B. O(log2n) C. O(n2) D. O(nlog2n) 2.在对长度为n的顺序存储的有序表进行折半查找,对应的折半查找判定树的高度为()。【*,★】 A.n B. C. D. 3.采用顺序查找方式查找长度为n的线性表时,平均查找长度为()。【*】 A.n B. n/2 C. (n+1)/2 D. (n-1)/2 4.采用折半查找方法检索长度为n的有序表,检索每个元素的平均比较次数()对应判定树的高度(设高度大于 等于2)。【**】 A.小于 B. 大于 C. 等于 D. 大于等于 5.已知有序表(13,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,查找成功 的比较次数为()。【*】 A. 1 B. 2 C. 3 D. 4 6.对线性表进行折半查找时,要求线性表必须()。【*】 A.以顺序方式存储 B. 以链接方式存储 C.以顺序方式存储,且结点按关键字有序排序 D. 以链接方式存储,且结点按关键字有序排序 7.顺序查找法适合于存储结构为()的查找表。【*】 A.散列存储 B. 顺序或链接存储 C. 压缩存储 D. 索引存储 8.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在 的块时,每块应分()个结点最佳。【**】 A.10 B. 25 C. 6 D. 625 9.从键盘依次输入关键字的值:t、u、r、b、o、p、a、s、c、l,建立二叉排序树,则其先序遍历序列为(), 中序遍历序列为()。【**,★】 A.abcloprstu B. alcpobsrut C. trbaoclpsu D. trubsaocpl 10.折半查找和二叉排序树的时间性能()。【*】 A.相同 B. 不相同 11.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。 A.2k-1-1 B. 2k-1 C. 2k-1+1 D. 2k-1 12.利用逐点插入法建立序列{50,72,43,85,75,20,35,45,65,30}对应的二叉排序树以后,查找元素35要

数据结构中的,线性表的c语言表示和插入,删除,查找操作程序

#include #include #define MaxSize 100 typedef struct { int data[MaxSize]; int length; } SqList; void InitList(SqList *L) { // 传入的参数用指针 L->length = 0; return; } int GetLength(SqList L) { return L.length; } int GetElem(SqList L, int i, int *e) { if (i < 1 || i > L.length){ /*无效的i值*/ return 0; }else { *e = L.data[i - 1]; //改变指针的值前面用* return 1; } } int Locate(SqList L, int x) /*按值查找*/ { int i = 0; while (L.data[i] != x){ /*查找值为x的第1个结点*/ i++; } if (i > L.length){ return (0); /*未找到*/ }else{ return (i+1); } } int InsElem(SqList *L, int x, int i) { int j; if (i < 1 || i > L->length +1){ /*无效的参数i*/ return 0; } for (j = L->length; j >= i; j--) { /*将位置为i的结点及之后的结点后移*/ L->data[j] = L->data[j - 1]; } L->data[i - 1] = x; /*在位置i处放入x*/ L->length++; /*线性表长度增1*/

实现线性表(顺序存储)的按值查找功能

《程序设计与算法分析》 实验报告 学院:通信与信息工程学院 班级:电子商务1002 姓名:闫树彬 学号:1007100213

《程序设计与算法分析》实验报告 一设计的目的与内容 1.设计目的 通过本实验需要掌握顺序表的顺序存储结构,进一步熟悉c语言的函数的基本结构,掌握程序间的相互关系,需要完成建立一个顺序存储结构的线性表,并且通过遍历完成按值查找的过程。 2.实验内容 用C语言编写一个顺序存储结构的线性表程序,实现按值查找功能。 二算法的基本思想 1.数据结构的设计 从第一个元素L->elem[0]起依次和x比较,当找到一个与x相等的数据元素后,则返回它在顺序表中的序号;当查找整个线性表一遍没有找到与x相等的元素时,则返回-1. 2.算法的基本思想 本算法的主要运算是比较。比较的次数与x在表中的位置有关,也与表长有关。当L->elem[0]=x时,比较一次成功;当L->elem[L->last]=x时,比较n次成功,平均比较次数为(n+1)/2,时间复杂度为O(n)。 三源程序代码及测试结果 1. 源程序代码 #include #define MAXLen 100 //定义了一个结构体,包含线性表的数组和下标特征 typedef struct Linear_list { int elem[MAXLen]; // 定义一个线性表的足够大的一维数组 int last; //线性表中最后一个元素在数组中的位置 } SeqList; //线性表的创建过程 SeqList *InitList( )

{ SeqList *L; L=( SeqList *)malloc(sizeof(SeqList)); //分配100个空间连续的一维数组 L->last=-1; //数组长度为0 return L; } //建立实际的线性表,返回数组的大小 SeqList *create (SeqList *L ) { int i,n,temp; printf("请输入实际数组的大小n:"); scanf("%d",&n); printf("\n请输入实际数组中的各个数值:"); for(i=0;i

数据结构实验折半查找C语言实现

#include #include #include #define overflow -1 #define EQ(a,b) ((a)==(b)) #define LT(a,b) ((a)<(b)) #define LQ(a,b) ((a)<=(b)) //--------------------------折半查找的数据结构------------------------ typedef intKeyType; typedef struct{ KeyType key; }ElemType; typedef struct{ ElemType *elem; int length; }SST able; //---------------------------操作函数----------------------------------- void InitList(SSTable&ST,KeyType n);//静态查找表的初始化 void createSST able(SST able&ST);//向查找表中输入元素 void print(SST able ST); intsearch_Seq(SSTableST,KeyType key); void SortSST able(SSTable&ST); intSearch_Bin(SSTableST,KeyType key); //---------------------------算法实现----------------------------------- ////////////////////////////静态查找表的初始化,查找表长度为n/////////////////////////// void InitList(SSTable&ST,int n) { ST.elem=(ElemType *)malloc((n+1)*sizeof(KeyType)); if(!ST.elem) exit(overflow); ST.length=n; } ////////////////////////////向查找表中输入元素/////////////////////////// void createSST able(SST able&ST) {int a; printf("要向查找表中输入多少元素?\n");

有序表的对分查找(实验报告)

一、实验目的和要求 理解和掌握线性表的查找技术,使用C语言根据相应算法编写一个程序,实现顺序存储的有序表的对分查找。要求仔细阅读下面的内容,编写C程序,上机通过,并观察其结果,写出实验报告书。 二、实验内容和原理 内容:在顺序存储的长度为15的有序线性表中对分查找元素n的下标m。 原理:有序线性表的长度为15,被查元素为n,将n与线性表的中间项进行比较,分三种情况:若中间项的值等于n,则说明查到,查找结束。若n小于中间项的值,则在线性表的前半部分以相同的方法进行查找。若n大于中间项的值,则在线性表的后半部分以相同的方法进行查找。 三、主要仪器设备 计算机一台 四、实验主程序 #include int search(int a[],int size,int x); int main(void) { int a[15]={0,5,7,16,33,58,99,153,225,310,999,2314,4512,8888,9999},n,m; printf("input a value:\n"); while(scanf("%d",&n)) { m=search(a,15,n); if(m!=-1) printf("a[%d]=%d \n",m,n); else printf("%d is not in the arry.\n",n); printf("input the next value\n"); } getchar(); return 0; } int search(int a[],int size,int x) { int i=1, j=size, k=(i+j)/2; while(a[k-1]!=x&&i<=j)

在数据的存放无规律而言的线性表中进行检索的最佳方法

第7章查找自测卷姓名班级 一、填空题 1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是。 2. 线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索次。设有100个结点,用二分法查找时,最大比较次数是。 3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结 点数为;比较四次查找成功的结点数为;平均查找长度为。 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素比较大小。 5. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。 6. 散列法存储的基本思想是由决定数据的存储地址。 7. 有一个表长为m的散列表,初始状态为空,现将n(n

相关文档
最新文档