中南大学网络教育数据结构
数据结构复习题及答案
中南大学现代远程教育课程考试(考试)复习题及参考答案数据结构(使用教材:余腊生编著,人民邮电出版社出版,《数据结构—基于C++模板类的实现》一、判断题1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
[ ] 2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
[ ]3.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
[ ] 4.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
[ ] 5.一个广义表的表尾总是一个广义表。
[ ] 6.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
[ ] 7.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
[ ] 8.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
[ ] 9.直接选择排序是一种稳定的排序方法。
[ ] 10.30、闭散列法通常比开散列法时间效率更高。
[ ] 11.有n个结点的不同的二叉树有n!棵。
[ ] 12.直接选择排序是一种不稳定的排序方法。
[ ] 13.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
[ ] 14.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
[ ] 15.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
[ ] 16.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
在设计再散列函数时,要求计算出的值与表的大小m互质。
[ ] 17.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
[ ] 18.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
数据结构-中南大学网络教育学院网上作业模拟练习题
(一) 单选题1. 若已知一个栈的入栈序列是,其输出序列为,若,则为()。
(A)(B)(C)(D) 不确定参考答案:(C)2. 程序段如下:其中n为正整数,则最后一行的语句频度在最坏情况下是()。
(A)(B)(C)(D)参考答案:(D)3. 一个栈的入栈序列是,则栈的不可能的输出序列是()。
(A) adcba(B) decba(C) dceab(D) abcde参考答案:(C)4. 从一个长度为n的顺序表中删除第i个元素时,需向前移动的元素的个数是()。
(A)(B)(C)(D)参考答案:(A)5. 栈和队列的共同点是()。
(A) 都是先进先出(B) 都是先进后出(C) 只允许在端点处插入和删除元素(D) 没有共同点参考答案:(C)6. 与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
(A) 存储结构(B) 逻辑结构(C) 算法(D) 操作参考答案:(B)7. 设广义表,则L的长度和深度分别为()。
(A) 1和3 (B) 1和1 (C) 1和2 (D) 2和3参考答案:(C)8. 顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为()。
(A)(B)(C)(D)参考答案:(D)9. 在下面的程序段中,对x的赋值语句的频度为()。
(A)(B)(C)(D)参考答案:(C)10. 一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程()。
(A) 较快(B) 较慢(C) 相同(D) 不定参考答案:(B)11. 求循环链表中当前结点的后继和前驱的时间复杂度分别是()。
(A) 和(B) 和(C) 和(D) 和参考答案:(C)12. 数据的基本单位是()。
(A) 数据项(B) 数据类型(C) 数据元素(D) 数据变量参考答案:(A)13. 从逻辑上可以把数据结构分为()两大类。
(A) 动态结构、静态结构(B) 顺序结构、链式结构(C) 线性结构、非线性结构(D) 初等结构、构造型结构参考答案:(C)14. 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是()。
中南大学数据结构实验报告1(线性表)
中南⼤学数据结构实验报告1(线性表)实验⼀线性表的操作算法⼀、实验⽬的:1了解线性表的逻辑结构和存储结构,以及定义在逻辑结构上的各种基本运算2分别以数组和链表为存储结构,实现线性表的插⼊,删除,查找,排序,合并等操作⼆、实验内容:⽤C/C++语⾔编写程序,分别以数组和链表为存储结构,完成以下功能:1输⼊数据,创建⼀个线性表2可在线性表的任意位置插⼊新结点3可删除线性表的任意⼀个结点4可在线性表中查找结点5将线性表从⼩⾄⼤排序6将两个线性表合并三、详细设计:顺序表#includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct { //结构体ElemType *elem;int length;int listsize;}SqList;SqList Lx;Status InitList_Sq(SqList &L) //分配空间{ L.elem=new ElemType[LIST_INIT_SIZE];if(!L.elem)exit(OVERFLOW);L.length =0;L.listsize=LIST_INIT_SIZE;return OK;}Status ListInsert(SqList &L,int i,ElemType e) //插⼊新元素{ int *q,*p;ElemType *newbase; if(i<1 || i>L.length+1) return ERROR;if(L.length>=L.listsize){ newbase=new ElemType[L.listsize+LISTINCREMENT];if(!newbase) exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1]);for (p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;}Status Listlength(SqList L) //长度{ int *p=L.elem; //判断线形表是否存在while(p){ return (L.length); }}Status GetElem(SqList L, int i,ElemType &e) //取元素{ if(i<1 || i>L.length)return ERROR;else{ e=L.elem[i-1];return e;}}void MergeList(SqList La,SqList Lb,SqList &Lc) //合并{ ElemType ai,bj;InitList_Sq(Lc);int i=1,j=1,k=0;int La_len,Lb_len;La_len=Listlength(La);Lb_len=Listlength(Lb);while((i<=La_len)&&(j<=Lb_len)){ GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai<=bj){ ListInsert(Lc,++k,ai);++i; }else{ ListInsert(Lc,++k,bj);++j; }}while(i<=La_len){ GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){ GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);}}void show(SqList L,int i) //显⽰{ int j;ElemType k;cout<<"顺序表显⽰如下:"<for(j=0;j{ k=L.elem[j];cout<"; }if(j==i-1 && i>0){ k=L.elem[j]; cout<cout<}void create(SqList &L,int n) //输⼊元素{ int e; for(int i=0;i{ cin>>e;L.elem[i]=e;L.length=i+1; }}Status ListDelete_Sq(SqList &L,int i,ElemType &e) //删除{ ElemType *p, *q; if(i<1 || i>L.length) return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p) *(p-1)=*p;--L.length;return OK;}Status Listxiugei(SqList &L,int i,ElemType &e) //修改{ if(i<1 || i>L.length) return ERROR;else{ L.elem[i-1]=e;return OK; }}void shuru(SqList &L1) //顺序表的创建{ int a;InitList_Sq(L1);cout<<"请输⼊顺序表的长度:";cin>>a;cout<<"请输⼊顺序表的元素(共"<create(L1,a);show(L1,a);}void shanchu(SqList &L1) //删除顺序表⾥的元素{ int a;int j; ElemType e1;a=L1.length;cout<<"请选择所要删除元素的位置:";cin>>j;while(j<0||j>Listlength(L1)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要删除元素的位置:";cin>>j; }ListDelete_Sq(L1,j,e1);cout<<"修改后的顺序表数据:"<show(L1,a-1);}void charu(SqList &L1) //插⼊元素到顺序表⾥{ int a; int j; ElemType e1; a=L1.length;cout<<"请选择所要插⼊元素的位置:";cin>>j;while(j<0||j>Listlength(L1)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要插⼊元素的位置:";cin>>j; }cout<<"要插⼊的元素:";cin>>e1;ListInsert(L1,j,e1);cout<<"修改后的顺序表数据:"<show(L1,a+1);}void hebing(SqList &L3) //合并两个顺序表{ SqList L1,L2;int a,b;InitList_Sq(L1); InitList_Sq(L2);cout<<"请输⼊第⼀个有序表的长度:"; cin>>a;cout<<"请输⼊第⼀个有序表的元素(共"<create(L1,a);show(L1,a);cout<<"请输⼊第⼆个有序表的长度:"; cin>>b;cout<<"请输⼊第⼆个有序表的元素(共"<create(L2,b);show(L2,b);MergeList(L1,L2,L3);cout<<"合并后的有序表如下:"; show(L3,a+b);}void main() //主菜单{ int choice;for(;;){ cout<<"顺序表的基本操作"<cout<<"1.顺序表的创建"<cout<<"2.顺序表的显⽰"<cout<<"3.顺序表的长度"<cout<<"4.插⼊元素到顺序表⾥"<cout<<"5.删除顺序表⾥的元素"<cout<<"6.合并两个顺序表"<cout<<"7.退出系统"<cout<<"请选择:";cin>>choice;switch(choice){ case 1: shuru(Lx);break;case 2: show(Lx,Lx.length);break;case 3: cout<<"顺序表的长度:"<case 4: charu(Lx);break;case 5: shanchu(Lx);break;case 6: hebing(Lx);break;case 7: cout<<"退出系统!"<default : cout<<"输⼊有误,请重新选择"< }}链表#includeusing namespace std;#define true 1#define false 0#define ok 1#define error 0#define overflow -2typedef int Status;typedef int ElemType;typedef struct LNode //存储结构{ ElemType data;struct LNode *next;}LNode,*LinkList;void CreateList(LinkList &L,int n) //尾插法创建单链表{ LinkList p;L=new LNode;L->next=NULL; //建⽴⼀个带头结点的单链表LinkList q=L; //使q指向表尾for(int i=1;i<=n;i++){ p=new LNode;cin>>p->data;p->next=NULL;q->next=p;q=p; }}Status GetElem(LinkList L,int i,ElemType &e)//取第i个元素{ LinkList p=L->next;int j=1;while(p&&j{ p=p->next;++j; }if(!p||j>i) return error; //第i个元素不存在e=p->data;return ok;}Status LinkInsert(LinkList &L,int i,ElemType e) //插⼊{ LinkList p=L;int j=0;while(p&&j{ p=p->next;++j; } //寻找第i-1个结点 if(!p||j>i-1)return error; //i⼩于1或者⼤于表长加1 LinkList s=new LNode; //⽣成新结点s->data=e;s->next=p->next; //插⼊L中p->next=s;return ok;}Status ListDelete(LinkList &L,int i,ElemType &e) // 删除{ LinkList p=L;LinkList q;int j=0;while(p->next&&j{ //寻找第i个结点,并令p指向其前驱 p=p->next;++j; }if(!(p->next)||j>i-1) return error; //删除位置不合理q=p->next;p->next=q->next; //删除并释放结点e=q->data;delete(q);return ok;}void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) { //合并两个顺序链表LinkList pa,pc,pb; pa=La->next;pb=Lb->next;Lc=pc=La;while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; }else{ pc->next=pb;pc=pb;pb=pb->next; }}pc->next=pa?pa:pb;delete(Lb);}void show(LinkList L) //显⽰{ LinkList p;p=L->next;while(p){ cout<data<<"-->";p=p->next; }cout<}int Length(LinkList L,int i) //表长{ i=0;LinkList p=L->next;while(p){ ++i;p=p->next; }return i;}void xiugai(LinkList L) //修改{ int i,j=1;ElemType k;ElemType e,m;LinkList p=L->next;cout<<"请输⼊要修改的元素位置(0 cin>>i;GetElem(L,i,e);cout<<"该位置的元素:"<cout<<"修改后的元素值:";cin>>k;while(p&&j{ p=p->next;++j; }m=p->data;p->data=k;cout<<"修改后的单链表显⽰如下:"< show(L);}void hebing() //合并两个单链表{ int a,b;LinkList La,Lb,Lc;cout<<"请输⼊第⼀个有序链表的长度:"<cin>>a;cout<<"请输⼊第⼀个有序链表的元素共("< CreateList(La,a);show(La);cout<<"请输⼊第⼆个有序链表的长度:"< cin>>b;cout<<"请输⼊第⼆个有序链表的元素共("< CreateList(Lb,b);show (Lb);MergeList(La,Lb,Lc);cout<<"合并后的有序链表如下:"<show(Lc);}void main() //主函数{ int select;int x;ElemType y;LinkList list;for(;;){ cout<<"单链表的基本操作"<cout<<"1.单链表的创建"<cout<<"2.单链表的显⽰"<cout<<"3.单链表的长度"<cout<<"4.插⼊元素到单链表⾥"<cout<<"5.删除单链表⾥的元素"<cout<<"6.合并两个单链表"<cout<<"7.退出系统"<cout<<"请选择:";cin>>select;switch(select){ case 1:cout<<"请输⼊单链表的长度:"< cin>>x;cout<<"请输⼊"<CreateList(list,x);break;case 2: cout<<"单链表显⽰如下:"<show(list);break;case 3: int s;cout<<"单链表的长度为:"<break;case 4: cout<<"请选择要插⼊的位置:"; cin>>x; while(x<0||x>Length(list,s)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要插⼊元素的位置:"; cin>>x; }cout<<"要插⼊的元素值:";cin>>y;LinkInsert( list,x,y);cout<<"插⼊后单链表显⽰如下:"<show(list);break;case 5: cout<<"请选择要删除的位置:"; cin>>x; while(x<0||x>Length(list,s)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要删除元素的位置:"; cin>>x; }ListDelete(list,x,y);cout<<"要删除的元素值:"<cout<<"删除后的单链表显⽰如下:"<show(list);break;case 6: hebing();break;case 7: exit(0);break;default : cout<<"输⼊有误,请重新输⼊"< break;}}}四、实验结果:顺序表链表。
中南大学《数据结构》课程设计题目及要求
《数据结构》课程设计指导书(一):设计目的:1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4)进行全面综合的训练,对课堂教学、实验等环节的有益补充。
5)提高解决实际问题和培养软件工作所需的动手能力。
6)深化理解和灵活掌握教学内容7)进行软件工程的综合训练。
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
(二):设计要求:1) 学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通。
2) 学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。
3) 课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C/C++语言/JAVA设计的程序,总共至少要上机调试程序30小时4) 课程设计题目如下,题后有要求的按要求完成,没有要求的至少从中选择并完成二个题目。
5) 设计期间,要求严格遵守学校规章制度和实验室管理制度。
6) 按指定时间上机,服从指导教师和实验室其他老师的安排。
7) 上机前,应编写相应的程序,禁止无准备的上机。
(三):课程设计题目:一、试设计一个航空客运订票系统。
基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
中南大学计算机数据结构试题参考答案讲解学习
中南大学计算机数据结构2013试题参考答案中南大学考试试卷2015--2016学年上学期期末考试试题时间100分钟数据结构课程56学时3.5学分考试形式:闭卷专业年级:计算机科学与技术10级总分100分,占总评成绩70%姓名班级学号(本试卷共四道大题,答案全部做在答题纸上!)一、选择题(每题2分,共24分)1.以下数据结构中,属于线性结构的是()A.图B.栈C.二分查找树D.森林2.用二分法查找表(a0,a1,a2,a3,……a16),需要比较2次才能找到的元素是()A.a7和a16 B.a11和a13C.a1和a14 D.a3和a123.用概率查找改进查找效率,是经过多次查找以后使得()A.查找次数越少的元素查找速度越快B.查找次数越少的元素越往前存放C.查找次数越多的元素越往后存放D.查找次数越多的元素查找速度越快4.二分查找要求元素( )A.有序、顺序存储B.有序、链式存储C.无序、顺序存储D.无序、链式存储5.已知pPre为指向链表中某结点的指针,pNew是指向新结点的指针,以下哪段伪码算法是将一个新结点插入到链表中pPre所指向结点的后面?()A.pPre->link = pNew; pNew = null;B.pPre->link = pNew->link; pNew->link = null;C.pNew->link = pPre->link; pPre->link = pNew;D.pNew->link = pPre->link; pPre->link = null;6.在递归算法执行过程中,计算机系统必定会用到的数据结构是()A.队列B.链表C.栈D.二叉树7.一个队列的入列序为ABCD,则队列的可能输出序列为()A.DCBA B.ABCDC.ADCB D.CBDA8.具有10个叶子结点的二叉树中有()个度为2的结点A.8 B.9C.10 D.119.若A=10,B=4,C=6,D=4,E=15则后缀表达式“AB*CD+-E+”的值为( )。
中南大学数据结构课程设计-排课问题、表达式
中南大学《数据结构》课程设计报告学生姓名学号指导教师学院专业班级完成时间目录目录............................................................................................................................................. - 2 -题目一:利用线性表进行算式计算 ................................................................................................. - 1 -一、实验名称: (1)二、需求分析: (1)三、概要设计 (1)四、详细设计 (3)五、调试分析 (5)六、测试结果 (5)七、课程设计总结 (7)八、参考文献 (8)九、附录 (9)题目三:排课问题........................................................................................................................... - 21 -一、实验名称: (21)二、需求分析: (21)三、概要设计 (21)四、详细设计 (24)五、调试分析 (33)六、测试结果 (33)七、课程设计总结 (34)八、参考文献 (35)九、附录 (35)题目一:利用线性表进行算式计算一、实验名称:利用线性表进行算式计算二、需求分析:设计任务:界面上出现一个文本框,输入一个算式,点击按钮,显示结果。
该算式内只含有数字、括号、+、-、*、/、%这几种字符,优先级为:括号--%--*,/--+,-。
如输入:2+3*5,结果为17,输入(2+3)*5结果为25。
输入格式有误,需要给予提示。
在算法中,必须实现对输入的算式字符串的分析,而不仅仅是得到结果。
中南大学数据结构实验报告(七)
实验七1.需求分析本实验目的是使读者,掌握常用排序方法的基本思想,通过实验加深理解各种排序算法,通过实验掌握各种排序方法的时间复杂度分析,了解各种排序方法的优缺点及适用范围。
1.排序算法的实现(设计性实验)问题描述排序是计算机领域的一项重要技术,是程序设计中的一种重要运算。
它的功能是将一个数据元素的任意序列重新排列成一个按键有序的序列。
学习和研究各种排序方法是计算机工作者的一项重要工作课题。
基本要求随机产生n个整数(依次为n赋值100、200、300、1 000和2 000),将其存于数组A[1..n]中。
对主要算法(顺序查找、插入排序、归并排序、堆排序和快速排序)进行实验比较,计算出平均比较次数c n、平均移动次数m n及执行时间t n。
c n和m n由程序自动计算,t n由系统时间计算。
对实验结果数据进行对比分析。
测试数据由随机数生成器决定。
实现提示(1) 设计一个驱动程序,其任务是,随机输入一组原始数据A[1..n],对于查找还需准备一个键码值(可以随机产生,也可在A[1..n]中按索引号挑选若干有代表性的数据)。
对每组原始数据,分别调用查找或排序算法过程。
(2) 为了自动计算c n和m n需要在每个算法过程中的适当位置插入计数操作。
手工计算每个算法的执行时间t n时,为了减少计时误差,删除所插入的计数操作,并按n的大小确定一个K,对每个查找或排序算法过程反复调用K次,在调用开始前设置一个计时起点t0,在K次调用执行后可打印信息。
设计时的终点为t1,则(t1t0)/K便是算法的大致执行时间。
选作内容对不同的输入表长做试验,观察含义相同的变量相对于表长的变化关系,还可以对稳定性做验证。
2.统计成绩(综合性实验)问题描述给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名及各科成绩组成。
对学生的考试成绩进行有关统计,并打印统计表。
基本要求(1) 按总数高低次序,打印出名次表,分数相同的为同一名次。
1、数据结构复习题及答案
数据结构
一、判断题:
1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。()
2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。()
3.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。( )
D.选择合适的数据结构是解决应用问题的关键步骤
29.下面程序段的时间复杂度是()
i=s=0
while(s<n)
{i++;
s+=i;
}
A.O(1) B.O(n) C.O(log2n) D.O(n2)
30.对于顺序表来说,访问任一节点的时间复杂度是()
A.O(1) B.O(n) C.O(log2n) D.O(n2)
B.前者只能进行顺序存取,后者只能进行随机存取
C.前者建立静态索引结构,后者建立动态索引结构
D.前者的存储介质是磁盘,后者的存储介质不是磁盘
28.下列描述中正确的是()
A.线性表的逻辑顺序与存储顺序总是一致的
B.每种数据结构都具备三个基本运算:插入、删除和查找
C.数据结构实质上包括逻辑结构和存储结构两方面的内容
22.在顺序表中取出第i个元素所花费的时间与i成正比。 ( )
23.在栈满情况下不能作进栈运算,否则产生“上溢”。()
24.二路归并排序的核心操作是将两个有序序列归并为一个有序序列。 ( )
25.对任意一个图,从它的某个顶点出发,进行一次深度优先或广度优先搜索,即可访问图的每个顶点.( )
26.二叉排序树或者是一棵空二叉树,或者不是具有下列性质的二叉树:若它的左子树非空,则根结点的值大于其左孩子的值;若它的右子树非空,则根结点的值小于其右孩子的值。( )
中南大学数据结构实验报告
[键入文档副标题][键入文档标题]实验题目:(1)单链表的实现(2)栈和队列(3)二叉树的遍历(4)查找与排序学生姓名:代巍学生学号:0909121615指导老师:余腊生所在学院:信息科学与工程学院专业班级:信息安全1201班指导教师评定:签名:实验一单链表的实现一、实验目的了解线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在某种存储结构上如何实现这些基本运算。
在熟悉上述内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题二、实验内容用C/C++语言编写程序,完成以下功能:(1)运行时输入数据,创建一个单链表(2)可在单链表的任意位置插入新结点(3)可删除单链表的任意一个结点(4)在单链表中查找结点(5)输出单链表三、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)用一组地址任意的存储单元存放线性表中的数据元素。
以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点(表示数据元素或数据元素的映象)以“结点的序列”表示线性表称作线性链表(单链表)单链表是指数据接点是单向排列的。
一个单链表结点,其结构类型分为两部分:(1)、数据域:用来存储本身数据。
(2)、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。
1、单链表的查找对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查好的值,若是返回该结点的指针,否则返回NULL。
2、单链表的插入因为在单链表的链域中包含了后继结点的存储地址,所以当我们实现的时候,只要知道该单链表的头指针,即可依次对每个结点的数据域进行检测。
假设在一个单链表中存在2个连续结点p、q(其中p为q的直接前驱),若我们需要在p、q之间插入一个新结点s,那么我们必须先为s分配空间并赋值,然后使p的链域存储s的地址,s的链域存储q的地址即可。
数据结构 中南大学
排序分类
按待排序记录所在位置 内部排序:待排序记录存放在内存中进行的 内部排序: 排序 外部排序: 外部排序:待排序记录的数量很大,以至内 存一次不能容纳全部记录,在排序过程中需 对外存进行访问的排序
按排序依据原则 插入排序: 插入排序:直接插入排序、折半插入排序、希尔排序 交换排序:冒泡排序、快速排序 交换排序: 选择排序: 选择排序:简单选择排序、堆排序 归并排序: 归并排序:2-路归并排序 基数排序
例5:
49 38 65 97 76 13 27 初 始 30 关 键 字 38 49 49 38 65 76 97 97 76 13 27 97 13 30 27 97 30 97 第 一 趟 38 49 65 13 76 76 13 27 76 27 30 30 76 97 38 49 13 65 13 27 65 30 27 65 65 30 76 第 二 趟 38 49 13 13 49 27 27 49 30 49 30 65 第 三 趟 第 四 趟 第 五 趟 第 六 趟 13 38 27 38 13 38 30 27 30 38 49 13 27 30 38 13 27 30
按排序所需工作量 简单的排序方法: 简单的排序方法:T(n)=O(n²) 先进的排序方法:T(n)=O(logn) 先进的排序方法: 基数排序: 基数排序:T(n)=O(d·n)
n为记录的个数, 为记录的个数, 为记录的个数 d为关键字的位数 为关键字的位数
排序基本操作 比较两个关键字大小 将记录从一个位置移动到另一个位置 评价一个排序方法好坏的标准 排序所需比较关键字的次数 ——少 少 排序所需移动记录的次数 ——少 少 排序过程中所需的辅助空间的大小 ——小 小 算法本身的复杂程度
算法评价
中南大学《数据结构》课程作业(在线作业)二及参考答案
(一) 单选题1. 用邻接表表示图进行深度优先遍历时,通常是采用()来实现算法的。
(A) 栈(B) 队列(C) 树(D) 图参考答案: (A)2. 设图的邻接链表如图所示,则该图的边的数目是()。
(A) 4(B)5 (C) 10(D) 20参考答案: (B)3. 若采用邻接矩阵翻存储一个n 个顶点的无向图,则该邻接矩阵是一个()。
(A)上三角矩阵(B)稀疏矩阵(C)对角矩阵(D)对称矩阵参考答案: (D)4.无向图,其中:,对该图进行深度优先遍历,得到的顶点序列正确的是()。
(A)a,b,e,c,d,f (B)a,c,f,e,b,d (C)a,e,b,c,f,d(D)a,e,d,f,c,b参考答案: (D)5. 设森林F 对应的二叉树为B ,它有m 个结点,B 的根为p ,p 的右子树结点个数为n,森林F 中第一棵子树的结点个数是()。
(A)(B)(C)(D) 条件不足,无法确定参考答案: (A)6. 关键路径是事件结点网络中()。
(A) 从源点到汇点的最长路径(B) 从源点到汇点的最短路径(C) 最长回路(D) 最短回路参考答案: (A)7. 树最适合用来表示()。
(A)有序数据元素(B) 无序数据元素(C) 元素之间具有分支层次关系的数据(D) 元素之间无联系的数据参考答案:(C)8. 在一棵具有n个结点的二叉链表中,所有结点的空域个数等于()。
(A)n(B)(C)(D)参考答案:(C)9. 在一个非空二叉树的中序遍历序列中,根结点的右边()。
(A)只有右子树上的所有结点(B) 只有右子树上的部分结点(C) 只有左子树的上的部分结点(D) 只有左子树上的所有结点参考答案:(A)10. 有8个结点的无向连通图最少有()条边。
(A)5 (B) 6 (C) 7 (D) 8参考答案:(C)11. 含有10个结点的二叉树中,度为0的结点数为4,则度为2的结点数为()。
(A)3 (B) 4 (C) 5 (D) 6参考答案:(A)12. 在有n个叶子结点的哈夫曼树中,其结点总数为()。
中南大学《数据结构》课程作业(在线作业)三及参考答案
(D) 40, 38, 46, 84, 56, 79
参考答案:
(C)
24.
对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列进行同样的排序操作,直到子序列为空或只剩下一个元素为止。这样的排序方法是()。
(A)直接选择排序(B)直接插入排序(C)快速排序(D)冒泡排序
参考答案:
(C)
5.
快速排序在下列哪种情况下最易发挥其长处()。
(A)被排序的数据中含有多个相同排序码
(B)被排序的数据已基本有序
(C)被排序的数据完全无序
(D)被排序的数据中的最大值和最小值相差悬殊
参考答案:
(C)
6.
能进行二分查找的线性表,必须以()。
(A)顺序方式存储,且元素按关键字有序
(B)链式方式存储,且元素按关键字有序
(一)单选题
1.
堆是一种()排序。
(A)插入(B)选择(C)交换(D)归并
参考答案:
(B)
2.
用某种排序方法对关键字序列进行排序时,序列的变化情况如下:20,15,21,25,47,27,68,35,8415,20,21,25,35,27,47,68,8415,20,21,25,27,35,47,68,84则采用的方法是()。
(C)顺序方式存储,且元素按关键字分块有序
(D)链式方式存储,且元素按关键字分块有序
参考答案:
(A)
7.
为使平均查找长度达到最小,当由关键字集合构建二叉排序树时,第一个插入的关键字应为()。
(A) 5 (B) 37 (C) 41 (D) 62
参考答案:
(B)
8.
中南大学十套数据结构试题及答案
676(10), 数据结构试卷(一) . 错误 !未定义书签。
书签。
数据结构试卷(二) . 错误 !未定义书签。
数据结构试卷(四)参考答案 错误 ! 未定义 数据结构试卷(三) . 错误 !未定义书签。
书签。
数据结构试卷(四) . 错误 !未定义书签。
数据结构试卷(五)参考答案 错误 ! 未定义 数据结构试卷(五) . 错误 !未定义书签。
书签。
数据结构试卷(六) . 错误 !未定义书签。
数据结构试卷(六)参考答案 错误 ! 未定义 数据结构试卷(七). 错误 !未定义书签。
书签。
数据结构试卷(八) . 错误 !未定义书签。
数据结构试卷(七)参考答案 错误 ! 未定义 数据结构试卷(九) . 错误 !未定义书签。
书签。
数据结构试卷(十). 错误 !未定义书签。
数据结构试卷(八)参考答案 错误 ! 未定义 数据结构试卷(一) 参考答案 错误 !未定义书签。
书签。
数据结构试卷(九)参考答案 错误 ! 未定义 数据结构试卷(二) 参考答案 错误 !未定义书签。
书签。
数据结构试卷(十)参考答案 错误 ! 未定义 数据结构试卷(三) 参考答案 错误 !未定义 书签。
数据结构试卷(一)每个元素占一个空间,问 A[3][3] (10)存放在什么位置脚注 (10)表示用 10进制表示。
A .688B . 678C .692D .696一、单选题(每题20 分)(2 分,共 1. 栈和队列的共同特点是A. 只允许在端点处插入和删除元素B. 都是先进后出C. 都是先进先出D. 没有共同点2. 用链接方式存储的队列,在进行插入运算时 ().A. 仅修改头指针B. 头、尾指针都要修改C.仅修改尾指针D.头、尾指针可能都要修改3. 以下数据结构中哪一个是非线性结构 ()A. 队列B. 栈C. 线性表D. 二叉树4. 设有一个二维数组 A[m][n],假设A[0][0]存放位置在644(io ), A[2][2]存放位置在)。
数据结构复习题及参考答案
中南大学网络教育课程考试复习题及参考答案数据结构一、填空:1.设需要对5个不同的记录关键字进行排序,则至少需要比较________次,至多需要比较__________次。
2.设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_________次。
3.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个。
4.数据结构从逻辑上划分为三种基本类型:___________、__________和___________。
5.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
6.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。
7.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
8.在快速排序、堆排序、归并排序中,_________排序是稳定的。
9.在有n个叶子结点的哈夫曼树中,总结点数是_______。
10.一棵树T采用二叉链表存储,如果树T中某结点为叶子结点,则在二叉链表BT中所对应的结点一定_______。
11.3.已知数组A[10][10]为对称矩阵,其中每个元素占5个单元。
现将其下三角部分按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,6]对应的地址是_______。
12.在有n个结点的无向图中,其边数最多为_______。
13.取出广义表A=(x,(a,b,c,d))中原子x的函数是_______。
14.对矩阵采用压缩存储是为了___ ____。
15.带头结点的双循环链表L为空表的条件是_______。
16.设线性表中元素的类型是实型,其首地址为1024,则线性表中第6个元素的存储位置是。
17.对于顺序存储的栈,因为栈的空间是有限的,在进行运算时,可能发生栈的上溢,在进行运算时,可能发生栈的下溢。
数据结构概念---中南大学教程
数据结构的概念美国计算机科学家Donald Ervin Knuth 首次提出了数据结构和算法的概念,并在他所著的《计算机程序设计艺术第1卷 基本算法》中首次较系统地阐述了数据的逻辑结构、存储结构及其操作。
随后,美国的一些大学开始设立与数据结构相关的课程。
同时,结构化程序设计逐渐成为当时程序设计的主流方法,人们也越来越重视数据结构。
各种版本的数据结构著作也相继出现。
数据结构作为计算机科学的一门分支学科,主要研究非数值计算的程序设计问题中计算机的操作对象、对象之间的关系和操作等。
为了编写出“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系。
数据结构的内容包括3个层次的5个“要素”,如表1-1所示。
其中的3个层次分别为抽象、实现与评价。
通过抽象,舍弃数据元素的具体内容,就得到逻辑结构表示,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到基本操作的定义。
上述两个方面的结合将问题变换为数据结构,这是一个从具体(即具体问题)到抽象(即数据结构)的过程。
最后,通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务,而这是一个从抽象(即数据结构)到具体(即具体实现)的过程。
熟练掌握这两个过程是数据结构课程在专业技能培养方面的基本目标。
在这个过程中需要对不同结构及其实现的性能进行评价,从而获得最佳实践方案。
表1-1 数据结构课程内容体系针对要处理的问题,设计最有利于操作系统处理的数据结构时需考虑下列因素。
(1) 数据的数量。
(2) 数据的使用次数和方式。
(3) 数据的性质是动态的还是静态的。
(4) 数据结构化后需要多大的存储空间。
(5) 存取结构化后的数据所需花费的时间。
(6) 是否容易程序化。
目前,“数据结构”已经是计算机科学及相关专业的一门专业基础课。
它与数学、计算机硬件和计算机软件之间的关系如图1-1所示。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统以及数据库系统等大型程序的基础。
中南大学2012-2013学年一学期《数据结构》考试试卷
第 1 页(共 2 页)数据结构试卷中南大学考试试卷2012 -- 2013学年 1学期时间 100 分钟 2013年 1 月 14 日数据结构课程 48 学时 3 学分 考试形式: 闭 卷专业年级:通信工程 11 级总分 100 分,占总评成绩 70 %注:此页不作答题纸,请将答案写在答题纸上一、线性结构题( 5 个小题,每个小题 8 分,共计 40 分)1. 在一个单链表中,若p 所指结点不是最后结点, s 指向已生成的新结点,则在p 之后插入s 所指结点的正确操作是如何表达?(8 分)2. 设有字符串为 3*-y ,试利用栈写出将其转换为 3y-* 的操作步骤。
假定用X 代表扫描该字符串过程中顺序取一个字符进栈的操作,用 S 代表从栈中取出一字符加入到新字符串尾的出栈操作。
例如,ABC 变为 BCA 的操作步骤 XXSXSS 。
( 8 分)3. 若 front 和 rear 分别表示循环队列 Q 的头指针和尾指针, m0表示该队列的最大容量,则循环队列为空的条件是什么?循环队列为满的条件是什么?(8 分)4. 二维数组 A[20][20] 采用按行为主序的存储方式,每个元素占4 个字节的存储单元,若A[0][0] 的存储地址为 300,则 [A][10][10] 的地址是多少?( 8 分 )5.用二分查找法对一个长度为10 的有序表 {8,12,15,17,19,23,24,26,29,33}进行查找,填写查找每一元素需要的比较次数。
( 8 分)二、非线性结构题( 5 个小题,每个小题 8 分,共计 40 分)1.现有某二叉树,按先根遍历的序列为 ABDEFCG ,H 按中根遍历的序列为 DEFBGHC ,A 试画出此二叉树。
( 8 分)2.已知无向图 G 的邻接矩阵如下,假设对其每行元素访问时必须从右到左,请写出从 V 0 开始的深度优先搜索的序列。
( 8 分)V 0 0 1 1 0 0V 1 1 0 1 1 1 V 2 1 1 0 1 1 V 3 0 1 1 0 1 V 40 v 0 v 1 1 1 v 2 v 1 3 0v 4110100230 3 50 10 60520第4 题图43.一组记录的键值为(46,74,18,53,14,20,40,38,86,65),求利用堆排序的方法建立的初始堆。
中南大学数据结构与算法-第1章绪论课后作业答案
第一章绪论习题练习答案1.1 简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
● 数据:指能够被计算机识别、存储和加工处理的信息载体。
● 数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。
数据元素有时可以由若干数据项组成。
● 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。
通常数据类型可以看作是程序设计语言中已实现的数据结构。
● 数据结构:指的是数据之间的相互关系,即数据的组织形式。
一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。
● 逻辑结构:指数据元素之间的逻辑关系。
● 存储结构:数据元素及其关系在计算机存储器内的表示,称为数据的存储结构.● 线性结构:数据逻辑结构中的一类。
它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都有且只有一个直接前趋和一个直接后继。
线性表就是一个典型的线性结构。
栈、队列、串等都是线性结构。
● 非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。
数组、广义表、树和图等数据结构都是非线性结构。
1.2 试举一个数据结构的例子、叙述其逻辑结构、存储结构、运算三个方面的内容。
答:例如有一张学生体检情况登记表,记录了一个班的学生的身高、体重等各项体检信息。
这张登记表中,每个学生的各项体检信息排在一行上。
这个表就是一个数据结构。
每个记录(有姓名,学号,身高和体重等字段)就是一个结点,对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继(它的前面和后面均有且只有一个记录)。
这几个关系就确定了这个表的逻辑结构是线性结构。
这个表中的数据如何存储到计算机里,并且如何表示数据元素之间的关系呢? 即用一片连续的内存单元来存放这些记录(如用数组表示)还是随机存放各结点数据再用指针进行链接呢? 这就是存储结构的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》学习中心:专业:学号:姓名:作业练习一(第二章)一、选择题1、以下关于线性表的说法不正确的是( )。
A)线性表中的数据元素可以是数字、字符、记录等不同类型。
B)线性表中包含的数据元素个数不是任意的。
C)线性表中的每个结点都有且只有一个直接前趋和直接后继。
D)存在这样的线性表:表中各结点都没有直接前趋和直接后继。
2、线性表的顺序存储结构是一种( )的存储结构。
A)随机存取 B)顺序存取C)索引存取 D)散列存取3、在顺序表中,只要知道( ),就可在相同时间内求出任一结点的存储地址。
A)基地址B)结点大小C)线性表大小D)基地址和结点大小4、下面关于线性表的叙述中,错误的是哪一个?()A)线性表采用顺序存储,必须占用一片连续的存储单元。
B)线性表采用顺序存储,便于进行插入和删除操作。
C)线性表采用链接存储,不必占用一片连续的存储单元。
D)线性表采用链接存储,便于插入和删除操作。
5、线性表采用链表存储时其存储地址要求()。
A)必须是连续的;B)部分地址必须是连续的;C)必须是不连续的;D)连续和不连续都可以。
6、一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移( )个元素。
A)n-i B)n-i+1 C)n-i-1 D)i7、( )运算中,使用顺序表比链表好。
A)插入B)删除C)根据序号查找 D)根据元素值查找8、个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )。
A) O(1) B) O(n) C) O(n2) D) O(log2n)9、在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次前移( )个元素。
A)n-i B)n-i+1 C)n-i-1 D)i10、在一个长度为n的线性表中顺序查找值为x的元素时,查找时的平均查找长度(即x 同元素的平均比较次数,假定查找每个元素的概率都相等)为( )。
A)n B)n/2 C)(n+1)/2 D)(n-1)/211、在一个带头结点单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。
A)HL = p; p->next = HL;B)p->next = HL; HL = p;C)p->next = HL; p = HL; D)p->next = HL->next; HL->next = p;12、在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行( )。
A)q->next = p->next ; p->next = q; B)p->next = q->next; q = p;C)q->next = p->next; p->next = q; D)p->next = q->next ; q->next = p;13、在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行( )。
A)p = q->next ; p->next = q->next; B)p = q->next ; q->next = p;C)p = q->next ; q->next = p->next; D)q->next = q->next->next; q->next = q;14、在双向链表指针p所指的结点前插入一个指针q所指的结点操作是()。
A)p->Prior=q; q->Next=p; p->Prior->Next=q; q->Prior=q;B)p->Prior=q; p->Prior->Next=q; q->Next=p; q->Prior=p->Prior;C)q->Next=p; q->Prior=p->Prior; p->Prior->Next=q; p->Prior=q;D)q->Prior=p->Prior; q->Next=q; p->Prior=q; p->Prior=q;二、填空题1、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为(),在给定值为x的结点后插入一个新结点的时间复杂度为()。
2、根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成()和()。
3、顺序存储结构是通过( )表示元素之间的关系的;链式存储结构是通过( )表示元素之间的关系的。
4、对于双向链表,在两个结点之间插入一个新结点需修改( )个指针,单链表为( )个。
5、循环单链表的最大优点是( ) 。
6、在无头结点的单链表中,第1个结点的地址存放在头指针中,其他结点的存储地址存放在( )结点的next域中。
7、带头结点的双循环链表L为空表的条件是()。
8、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用( )存储结构。
三、问答题与算法题1、试描述头指针、头结点、首结点的区别、并说明头指针和头结点的作用。
2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?3、为什么在单循环链表中设置尾指针比设置头指针更好?4、写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关语句。
结点结构为:(prior,data,next)5、下述算法的功能是什么?LinkList ABC(LinkList L){ // L 是无头结点单链表if( L&&L->next ){ Q=L;L=L->next;P=L;P->next=Q; Q->next=NULL;}return L;}6、V oid AA(SqList &L, int i, int x){ if(i>=1&&i<=Length(L)){ FOR(j= Length (L);j>=i;j - -)A[j+1]=A[j];A[i]=x;}else exit(ERROR);}假定调用该算法时线性表L的内容为(15,26,37,48,55),i为3,x为51,则调用返回后该单链表的内容变为什么?7、设顺序表L是一个递减有序表,试写一算法,插入元素x,插入后仍保持L的有序性。
V oid sinsert(Sqlist &S, int x)8、写出从一个带头结点....的单链表中删除其值等于给定值x的结点的算法函数。
Int delete(LinkList &L, int x){9、已知递增有序的两个带头结点....的单链表La,Lb分别存储了一个非空集合A,B。
设计算法实现求两个集合的并集的运算A=A∪Bvoid mergelist(linklist &La, linklist Lb)10、设计算法将不设表头结...的单向链表就地逆转。
.....点.的不循环(第三章)一、选择题1、对于栈操作数据的原则是()。
A)先进先出 B)后进先出 C)后进后出 D)不分顺序2、一般情况下,将递归算法转换成非递归应通过设置()实现。
A)数组;B)线性表;C)队列;D)栈。
3、栈和队列的共同点是()A)都是先进后出B)都是先进先出C)只允许在端点处插入和删除元素D)没有共同点4、个栈的入栈序列是abcde,则栈的不可能的输出序列是()。
A)edcba B) decba C)dceab D)abcde5、在对栈的操作中,能改变栈的结构的是()。
A)StackLength(S) B)StackEmpty(S) C)GetTop(S) D)ClearStack(S)6、在一个栈顶指针为HS的(不带头结点)链栈中将一个S指针所指的结点入栈,执行()。
A)HS->next=s; B)S->next=HS->next;HS->next=s;C)S->next=HS; HS=s; D)S->next=HS;HS=HS->next;7、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列是p1,p2,p3,…,pn,若p1=n,则pi=( )。
A)I B)n-i C)n-i+1D)不确定8、若用一个大小为6的数组来实现循环队列,且当前尾指针rear和头指针front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,尾指针rear和头指针front的值分别是()。
A)1和5;B)2和4;C)4和2;D)5和1。
9、输入序列为ABC,可以变为BAC时,经过的栈操作为()A)push,pop,push,pop,push,pop B)push,push,push,pop,pop,popC)push,push,pop,pop,push,pop D)push,pop,push,push,pop,pop10、设用一个大小m=60的顺序表A[m]表示一个循环队列,如果当前的尾指针rear=32,头指针front=15, 则当前循环队列的元素个数是( )。
A)42 ;B)16 ;C)17 ;D)41 。
11、设用顺序表a[n]表示循环队列,头、尾指针分别为front和rear,则判断队列为空的条件是(),判断队列满的条件是()。
(1)A)a.front +1= =a.rear ;B)a.front = = a.rear +1;C)a.front = = 0 ;D)a.front = = a.rear。
(2)A)(a.rear -1) % n = a.front ;B)(a.rear +1) % n = a.front;C) a.rear =( a.front-1) % n;D)a.rear = (a.front +1) % n 。
12、循环队列存储在数组A[0..m]中,则入队时的操作为()。
A)rear=rear+1 B)rear=(rear+1) mod (m-1)C)rear=(rear+1) mod m D)rear=(rear+1)mod(m+1)13、在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印,该缓冲区应该是一个()结构。
A)栈;B)队列;C)数组;D)线性表。
二、填空题1、在栈中,可进行插入和删除操作的一端称( )。
2、在作进栈运算时,应先判别栈是否( ),在作退栈运算时应先判别栈是否( )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( )。