若经常需要按序号查找线性表中的数据元素,采用()比较合适。A.顺序存储结构B.链式存储结
若经常需要按序号查找线性表中的数据元素,采用()比较合适。
A.顺序存储结构
B.链式存储结构
C.静态链表
D.链式存储结构或静态链表
若经常需要按序号查找线性表中的数据元素,采用()比较合适。
A.顺序存储结构
B.链式存储结构
C.静态链表
D.链式存储结构或静态链表
若经常需要按序号查找线性表中的数据元素,采用()比较合适。【北京理工大学2007一、2(1分)】
A.顺序存储结构
B.链式存储结构
C.静态链表
D.链式存储结构或静态链表
/*第二周顺序表作业: 请先阅读main()函数,了解程序功能,然后实现如下函数,并整个程序调试成功。 int ListInsert_sq(SqList &L, int i, ElemType e); int ListDeleteByIndex_sq(SqList &L, int i, ElemType &e); int ListDeleteByValue_sq(SqList &L, ElemType e); void ListTraverse(SqList L); */ //程序中多处用到了C++中的引用参数传递,请使用C++编译器 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE+1]; //约定:从elem[1]开始存储元素,elem[0]放弃不用,这样元素在线性表中的位序,与数组下标一致 int length; } SqList; //返回顺序表L中第1个与e相等的数据元素位序 int LocatElem_sq(SqList &L, ElemType e); //在第k个元素前插入元素x,若操作成功返回1, 若操作失败(如k非法、数组空间已满),则返回0 int ListInsert_sq(SqList &L, int k, ElemType e); //按指定位置删除元素:删除线性表L中第k个元素,用e返回其值,L长度减1。若k非法,则返回0,否则返回1 int ListDeleteByIndex_sq(SqList &L, int k, ElemType &e); //按值删除元素:在顺序表L中删除第一个值为e的元素。若删除成功返回1,若e不存在,则返回0 int ListDeleteByValue_sq(SqList &L, ElemType e); //遍历顺序表,输出所有元素 void ListTraverse(SqList L); int main() { SqList L; //顺序表 ElemType e; //存储一个元素值 int i, index; int slt; //存储用户的选择 printf("输入n和n个整数:"); scanf("%d", &L.length); for(i = 1; i <= l.length; i++) 下标从1开始 scanf("%d", &l.elem[i]); while(1) { printf("1.按值查找元素\n"); printf("2.按指定序号删除元素\n"); printf("3.按指定值删除元素\n"); printf("4.在指定位置插入指定元素\n"); printf("5.输出所有元素\n"); printf("0.退出\n"); printf("请输入你的选择:\n"); &slt); if(slt="=" 0) break; switch(slt) case 1: printf("输入待查找元素:"); &e); index="LocatElem_sq(L," e); locatelem()将返回顺序表l中第1个与e相等的元素下标 if(index> 0) printf("找到,下标为%d\n", index); else printf("找不到\n"); break; case 2: //按指定位置删除元素:读入一个序号i,删除线性表L中第i个元素,用e返回其值,L长度减1 printf("请输入待删除元素的序号i:"); scanf("%d", &i); if(ListDeleteByIndex_sq(L, i, e)) { printf("删除成功,被删除的元素是%d\n", e); printf("剩余元素为:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("删除失败\n"); break; case 3: //按值删除元素:读入一个整数e,在顺序表L中删除第一个值为e的元素,删除成功返回1,若e不存在,则返回0 printf("请输入待删除元素的值e:"); scanf("%d", &e); if(ListDeleteByValue_sq(L, e)) { printf("删除成功\n"); printf("剩余元素为:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("删除失败\n"); break; case 4: //在指定位置上插入新元素:读入一个整数e,和一个插入位置i,在线性表L中第i个元素之前插入新元素e, L长度加1 printf("请输入待插入元素:"); scanf("%d", &e); printf("请输入新元素位置序号:"); scanf("%d", &i); if(ListInsert_sq(L, i, e)) { printf("操作成功,更新后的序列如下:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("操作失败\n"); break; case 5: ListTraverse(L); //遍历顺序表,输出所有元素 break; } //结束switch }//结束while return 0; } //返回顺序表L中第1个与e相等的数据元素位序 int LocatElem_sq(SqList &L, ElemType e) { int i; for(i = 1; i <= l.length; i++) 下标从1开始 if(e="=" l.elem[i]) 若找到,返回下标1~l.length return i; 0; 若查找失败,返回0 }>
性表中采用折半查找法(二分查找法)查找一个数据元素,线性表应(54)。
A.数据元素按值有序
B.采用顺序存储结构
C.据元素按值有序,并且采用顺序存储结构
D.据元素按值有序,并且采用链式存储结构
【Ex-9-3】线性表中各结点的查找概率不等,则可用如下策略提高顺序查找的效率。若找到与给定值相匹配的元素,则将该元素与其直接前驱元素(若存在)交换,使得经常被查找的元素尽量位于表的前端。下面算法的功能是:在线性表的顺序存储表示和链接存储表示的基础上实现顺序查找。请在空白处填入正确的语句。 【解答】: (1) int SeqSearch (SeqList &L, elemType x ) { // 在顺序表 L 中从表的前端开始查找与给定值 x 匹配的元素,找到后与它前一个元素 //(若有)交换位置,再返回新的位置(注意地址从 0 开始)。 int i = 0; elemType temp; while (__________①__________ ) i++; if (_____②_________ ) return 0; //查找不成功 else { //查找成功 if (i > 0 ) { temp = L.elem[i - 1]; L.elem[i - 1] = L.elem[i]; L.elem[i] = temp; } return i; } } (2) LinkNode *LinkSearch (LinkList &L, elemType x ) { LinkNode *p = L->link, _______③_________; while (p != NULL && p->elem != x ) { ppre = pre; _____④_____; p = p->link; } if (p != NULL && pre != L ) { //查找成功,交换结点 p 与 pre _______⑤_______; p->link = pre; ppre->link = p; } return p; }
A.21
B.23
C.41
D.62
A.21
B.23
C.41
D.62
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!