收藏 分享(赏)

数据结构.doc

上传人:cjc2202537 文档编号:6213489 上传时间:2019-04-02 格式:DOC 页数:15 大小:214KB
下载 相关 举报
数据结构.doc_第1页
第1页 / 共15页
数据结构.doc_第2页
第2页 / 共15页
数据结构.doc_第3页
第3页 / 共15页
数据结构.doc_第4页
第4页 / 共15页
数据结构.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、第 1 页 共 15 页数据结构综合复习资料一、填空题1. 数据结构是( ) 。2. 堆栈的特点是( ) ,队列的特点是( ) ,字符串中的数据元素为( ) 。3. 列举三种树的存储方式( ) 、 ( )和( ) 。4. 哈希表查找技术的性能取决于三个因素,它们是( ) 、 ( )和( ) 。5. ADT称为抽象数据类型,它是指( ) 。6. 求下列程序的时间复杂度,并用大O表示方法表示( ) 。for( i=1 ; inext, p+1。13、 子串的定位操作。子串在主串中的位置; 0 。14、 16 ; 6。15、 O(n) 、 O(e/n) 。16、 29 , 12 ,15 , 10 ,

2、 58 , 18 ,25 , 47。17、 线性结构、树型结构 和 图状结构或网状结构。18、 单链表 、 双链表 和 循环链表 。19、 base+(j-1)*m+(i-1)*w。20、 vi 顶点对应的链表长度 。vi 顶点对应的链表长度。顶点 vi 的存储位置 。21、 O(nlogn) O(nlogn) , O(n 2) 。_flag=1_;for(j=1;jlength/2 ; i+) t = L-datai;/交换数据L - data i = L - data L - length - 1 - i ;L - data L - length - 1 - i = t ;2、二叉树采用二

3、叉链表作为存储结构,结点数据元素类型为字符型,用C语言完成:(1)给出二叉链表的结点。第 12 页 共 15 页(2)给出输出中序序列的遍历算法。解:(1)typedef 用户数据类型 elemtype; /定义数据元素类型typedef struct BiTNode char data ; /结点数据类型struct BiTNode *lchild, *rchild; /定义左、右孩子为指针型 BiTNode, *BiTree;(2)void InOrderTraverse (BiTree t) BiTNode *p;p=t;if (p!=NULL) InOrderTraverse(p-lc

4、hild);printf(“%c”,p-data);InOrderTraverse(p-rchild); 3、用顺序表存储空间的动态分配的方法实现线性表的插入算法。即在顺序存储的线性表中的第i个数据元素之前插入一个数据元素。解:Status ListInsert_sq(sequenlist / i值不合法if (L.len=L.listsize) /检查空间是否已满 newbase=(elemtype *)realloc(L.a,(listsize +LISTINCREMENT)*sizeof(elemtype); / 增加空间if (!newbase) exit (Overflow); /

5、空间增加失败L.a=newbase; /空间增加成功L.listsize + = LISTINCREMENT; q=p=q; -p) *(p+1)=*p; /将线性表第i个元素之后的所有元素向后移动*q=e; / /插入 e+L.len; / 表长 + 1Return OK;4、使用递归编写算法计算二叉树的高度。解:int Height(BinTree T) 第 13 页 共 15 页 int i,j;if(!T) return 0; else i=Height(T-lchild); j=Height(T-rchild); return 1+ij?i:j; 5、已知 Q 是一个非空队列,S 是

6、一个空栈。仅用队列和栈的 ADT 函数和少量工作变量,编写一个算法,将队列 Q 中的所有元素逆置。栈的 ADT 函数有:makeEmpty(s:stack);置空栈push(s:stack; value:datatype);新元素 value 进栈pop(s:stack):datatype;出栈,返回栈顶值isEmpty(s:stack):boolean;判栈空否队列的 ADT 函数有:enqueue(q:queue;value:datatype);元素 value 进队deQueue(q:queue):datatype;出队列,返回队头值isEmpty(q:queue):boolean;判队

7、列空否 解:void change(queue q,stack s) datatype temp;makeEmpty(s);while (!isEmpty(q) temp=deQueue(q);push(s,temp);while (!isEmpty(s) temp=pop(s);endueue(q,temp);6、串的堆分配存储结构如下:typedef struct char *ch;int len; HSTRING;编写串复制的算法 StringCopy(HSTRING *ss, HSTRING *dd),将串 ss 中的各个字符复制到串 dd 中。解:int StringCopy( HS

8、TRING *ss, HSTRING *dd) int I;dd=malloc(ss-len * sizeof(char);第 14 页 共 15 页if(!dd) printf(“Memory Overflow!”);return 0; else for(I=0;Ilen;I+)dd.chI=ss.chI;return 1;7、图的邻接矩阵和邻接表存储结构定义如下:邻接矩阵: typedef struct int vexnum,arcnum;char vexs100;int arcs100,100 MGraph;邻接表:typedef struct arcptr int adjvex; /邻

9、接点的存储位置struct arcptr *nextarc; ArcNode; /下邻接点typedef struct vexnode char data; /数据元素ArcNode *firstarc; Vnode;/第一个邻接点typedef struct int vexnum,arcnum; /图的顶点个数Vnode vertices100; ALGraph;给出将无向图的邻接矩阵转换成邻接表的算法。解:void MatToList(MGraph g, ALGraph *G)/*将邻接矩阵 g 转换成邻接表 G*/ int i,j,n=g.vexnum; ArcNode *p; /*n

10、为顶点数*/G=(ALGraph *)malloc(sizeof(ALGraph);for (i=0;iverticesi.data = g. vexsi;G-verticesi.firstarc=NULL;for (i=0;i=0;j-)if (g.arcsij!=0) p=(ArcNode *)malloc(sizeof(ArcNode); /*创建结点*p*/p-adjvex=j;第 15 页 共 15 页p-nextarc=G-adjlisti.firstarc;/*将*p 链到链表上*/G-verticesi.firstarc=p;G-vexnum=n; G-arcnum=g.arcnum;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 数据结构与算法

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报