收藏 分享(赏)

数据结构导论作业一.doc

上传人:精品资料 文档编号:9852396 上传时间:2019-09-11 格式:DOC 页数:19 大小:134.06KB
下载 相关 举报
数据结构导论作业一.doc_第1页
第1页 / 共19页
数据结构导论作业一.doc_第2页
第2页 / 共19页
数据结构导论作业一.doc_第3页
第3页 / 共19页
数据结构导论作业一.doc_第4页
第4页 / 共19页
数据结构导论作业一.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、1、章节作业第 一 章 概 论1设 计 算 法 在 整 型 数 组 An中 查 找 值 为 K 的 元 素 , 若 找 到 , 则 输 出 其 位置 i(0 i n-1), 否 则 输 出 -1 作 为 标 志 , 并 分 析 算 法 的 时 间 复 杂 度 。int search (int A,int n,int k) int i;i=0;while (inext;Int m=0;while (p!=NULL) if(p-data=x) m+;p=p-next;return m;2试分别以顺序表和带头结点的单链表作存储结构,各写一个实现线性表的就地(即使用尽可能少的附加空间)逆置的算法,在原

2、表的存储空间内将线性表(a1,a 2,a n)逆置为(a n,a n-1,a 1)。顺序表逆置算法void inverse_sqlist(Seqlist L)int m,n,k;DataType temp;m=0; n=L.length-1;while (mnext;head-next=NULL;while (p!=NULL)q=p-next;p-next=head-next;head-next=p;p=q;第 三 章 栈 、 队 列 和 数 组1有 一 个 整 数 序 列 , 其 输 入 顺 序 为 20, 30, 90, -10, 45, 78, 试 利 用 栈 将其 输 出序列改变为 3

3、0,-10,45,90,78,20 ,试给出该整数序列进栈和出栈的操作步骤。(用 push(x)表示 x 进栈,pop(x) 表示 x 出栈)push(20),push(30),pop(30),push(90),push(-10),pop(-10),push(45),pop(45),pop(90),push(78),pop(78),pop(20)2设有编号为 1,2,3,4 的四辆列车,顺序进入一个栈式结构的站台,试写出这四辆列车开出车站的所有可能的顺序。一号列车先出站:1234,1243,1324,1342,1432;二号列车先出站:2134,2143,2314,2341,2431;三好列车

4、先出站:3214,3241,3421;四号列车先出站:4321;但是这里的 4123、4132、4213、4231 都不是正解,所以共有 14 种可能3假设以带头结点的循环链表表示队列,并且只设一个指针指向队列尾结点(注意不设头指针),试编写相应的初始化队列、入队列和出队列算法。类型定义:typedef struct linksd_queueDataType data;struct linked_queue *next; LqueueTp;队列的初始化void InitQueue(LqueueTp *rear) LqueueTp *p;p=(LqueueTp *)malloc(sizeof(L

5、queueTp);rear=p;rear-next=rear;入队列void EnQueue(LqueueTp *rear;DataType x) LqueueTp *p;p=(LqueueTp*)malloc(sizeof(LqueueTp);p-data=x;p-next=rear-next;rear-next=p;rear=p出队列OutQueue(LqueueTp *rear,DataType *x) LqueueTp *h,*p ;if (rear=rear-next) error; return 0; else h=rear-next;p=h-next;*x=p-data;h-ne

6、xt=p-next;if (p=rear)rear=h;free(p);return 1;4假设以数组 cycquem存放循环队列的元素,同时设变量 rear 和 quelen 分别指示循环队列中队列尾元素位置和内含元素的个数。试给出此循环队列的队列满和队列空的条件,并写出相应的入队列和出队列的算法。类型定义:typedef struct cycqueueDataType datam;int rear;int quelen; CycqueueTp;CycqueueTp *cq队列满条件是:(cq-quelen=m)。队列空条件是:(cq-quelen=0)入队列:int EnCycQueue(

7、CycqueueTp *cq;DataType x)if (cq-quelen=m) error; return 0;else cq-rear=(cq-rear+1)%m;cq-datacq-rear=x;cq-quelen=cq-quelen+1;return 1;出队列:int OutCyQueue(CycqueueTp *cq)if (cq-quelen=0) error; return 0;else cq-quelen=cq-quelen-1;*x=cq-data(cq-rear+m-cq-quelen)% m;return 1;取队列首元素:DataType GetHead(Cycq

8、ueueTp *cq) DataType x;x=cq-datacq-rear=m-cq-quelen% m;return x;第 四 章 树 和 二 叉 树1 算 法 设 计 题(1)以 二 叉 链 表 作 存 储 结 构 , 试 编 写 求 二 叉 树 叶 子 结 点 个 数 的 算 法 。typedef struct btnode DataType data;struct btnode *lchild,*rchild;*BinTree;int leafnode_num(BinTree bt )if (bt=NULL) return 0 ;elseif (bt-lchild=NULL) e

9、lsereturn leafnode_num (bt-lchild)+leafnode_num (bt-rchild); (2)设 计 算 法 求 二 叉 树 的 结 点 的 个 数 。typedef struct btnodeDataType data;struct btnode *lchild,*rchild;*BinTree;int node_num (BinTree bt)if (bt=NULL) return 0;elsereturn node_num(bt-lchild)+node_num(bt-rchild)+1;(3)设 计 算 法 按 先 序 次 序 打 印 二 叉 树 T

10、中 叶 子 结 点 的 值 。typedef struct btnode int data;struct btnode *lchild,*rchild;*BinTree;void preorder (BinTree bt) if (bt!=NULL) if (bt-lchild=NULL) preorder(bt-lchild);preorder(bt-rchild);2 树 的 存 储 结 构 采 用 孩 子 兄 弟 链 表 , 试 编 写 树 的 按 层 次 遍 历 算 法typedef struct tnode int data;struct tnode *son,*brother;*T

11、ree;void tree_travel (Tree root ) InitQueue(Q);if (root1=NULL) EnQueue( q , root );while (!EmptyQueue(Q) p=GetHead(Q); OutQueue (Q);prinf(“%d” , p-data);p=p-son;while (p!=NULL) Enqueue (Q , p);p=p-brother;第 五 章 图1 求 下 列 有 向 图 中 从 顶 点 vo到 其 余 各 顶 点 的 最 短 路 径 及 长 度 (给 出 求 解 的 过 程 )。步骤 S u dist1 dist2

12、dist3 dist4 dist5 dist6第 1 步 v0 1 2 3 Max_int Max_int Max_int第 2 步 v0,v1 V1 1 2 3 2 Max_int Max_int第 3 步 v0,v1,v4 V4 1 2 3 2 Max_int 3第 4 步 v0,v1,v4,v2 V2 1 2 3 2 Max_int 3第 5 步 v0,v1,v4,v2,v3 V3 1 2 3 2 6 3第 6 步 v0,v1,v4,v2,v3,v6 V6 1 2 3 2 6 3第 7 步 v0,v1,v4,v2,v3,v6,v5V5 1 2 3 2 6 32写出将一个无向图的邻接矩阵转

13、换成邻接表的算法。#define vnum 20typedef struct graph VertexType vexsvnum;int arcsvnumvnum;int vexnum,arcnum; GraphTp_Mat;typedef struct arcnodeint adjvex;struct arcnode *nextarc; ArcNodeTp;typedef struct vexnode int vertex;ArcNodeTp *firstarc;AdjLisvnum;typedef struct graph AdjLis adjlist;int vexnum,arcnum;

14、 GraphTp_Adj;void Matrix_to_Adjlis(GraphTp_Mat *ga,GraphTp_Adj *gp) int I,j;ArcNodeTp *p;gp-vexnum=ga-vexnum;gp-arcnum=ga-arcnum;for ( i =0;Ivexnum;i+) gp-adjlisi.vertex=I;gp-adjlisi.firstarc=NULL;for (i=0;Ivexnum;i+)for (j=0;jvesnum;j+)if (ga-arcsij=1)p=(ArcNodeTp *)malloc(sizeof(ArcNodeTp);p-adjve

15、x=j;p-nextarc=ga-adjlisi.firstarc;ga-adjlisi.firstarc=p;第 六 章 查 找1假 设 线 性 表 中 结 点 是 按 键 值 递 增 的 顺 序 排 列 , 试 写 一 顺 序 查 找 算 法 , 将 岗哨 设 在 高 下 标 端 。 然 后 分 别 求 出 等 概 率 情 况 下 查 找 成 功 和 不 成 功 时 的 平均 查 找 长 度 。int search_sqtable(Sqtable R,KeyType k)int i=0;R. elem R.n.key=k;while (R. elem i.keyk i=R.n) retur

16、n -1;else return i;2试编写算法求键值为 k 结点在给定的二叉排序树中所在的层数。int level_count(BinTree bst,KeyType k)int lev=0;BSTNode *p=bst;while (p!=NULL)lev+;if (p-data=k) return lev;if (p-datarchild;elsep=p-lchild;return 0;3试写出从大到小输出二叉排序树中所有不小于 x 的元素的算法。void Print_NLT(BinTree T,int x)if (T!=NULL)Print_NLT(T-rchild,x);If (T

17、-data=x)printf(“%dn”,T-data);Print_NLT(T-lchild,x);第 七 章 排 序1对 于 给 定 的 一 组 键 值 : 83, 40, 63, 13, 84, 35, 96, 57, 39, 79, 6l, 15, 分 别画出应用直接插入排序、直接选择排序、冒泡排序、归并排序对上述序列进行排序过程。直接插入排序序:83 40 63 13 84 35 96 57 39 79 61 1540 83 63 13 84 35 96 57 39 79 61 1540 63 83 13 84 35 96 57 39 79 61 1513 40 63 83 84 3

18、5 96 57 39 79 61 1513 40 63 83 84 35 96 57 39 79 61 1513 35 40 63 83 84 96 57 39 79 61 1513 35 40 63 83 84 96 57 39 79 61 1513 35 40 57 63 83 84 96 39 79 61 1513 35 39 40 57 63 83 84 96 79 61 1513 35 39 40 57 63 79 83 84 96 61 1513 35 39 40 57 61 63 79 83 84 96 1513 15 35 39 40 57 61 63 79 83 84 96直

19、接选择排序:84 40 63 13 84 35 96 57 39 79 61 1513 40 63 83 84 35 96 57 39 79 61 1513 15 63 83 84 35 96 57 39 79 61 4013 15 35 83 84 63 96 57 39 79 61 4013 15 35 39 84 63 96 57 83 79 61 4013 15 35 39 40 63 96 57 83 79 61 8413 15 35 39 40 57 96 63 83 79 61 8413 15 35 39 40 57 61 63 83 79 96 8413 15 35 39 40

20、 57 61 63 83 79 96 8413 15 35 39 40 57 61 63 83 79 96 8413 15 35 39 40 57 61 63 79 83 96 8413 15 35 39 40 57 61 63 79 83 96 8413 15 35 39 40 57 61 63 79 83 84 96冒泡排序: 初始数据: 25 11 22 34 5 44 76 61 100 3 14 120第 1 趟结果: 11 22 25 5 34 44 61 76 3 14 100 120第 2 趟结果: 11 22 5 25 34 44 61 3 14 76 100 120第 3

21、趟结果: 5 5 22 25 34 44 3 14 61 76 100 120第 4 趟结果: 5 11 22 25 34 3 14 44 61 76 100 120第 5 趟结果: 5 11 22 25 3 14 34 44 61 76 100 120第 6 趟结果: 5 11 22 3 14 25 34 44 61 76 100 120第 7 趟结果: 5 11 3 14 22 25 34 44 61 76 100 120第 8 趟结果: 5 3 11 14 22 25 34 44 61 76 100 120第 9 趟结果: 3 5 11 14 22 25 34 44 61 76 100

22、120第 10 趟结果: 3 5 11 14 22 25 34 44 61 76 100 120归并排序:83 40 63 13 84 35 96 57 39 79 61 1540 83 13 63 35 84 57 96 39 79 15 6113 40 63 83 35 57 84 96 15 39 61 7913 35 40 57 63 83 84 96 15 39 61 7913 15 35 39 40 57 61 63 79 83 84 692若 对 序 列 (tang, deng, an, wan, shi, bai, fang, liu)按 字 典 顺 序 进 行 排 序 , 分

23、 别写出:冒泡排序第一趟的结果;deng an tang shi bai fang liu wan以第一个元素为分界的快速排序第一趟的结果;liu deng an liu bai fang tang wan堆排序时的初始堆。andengliuwanbaifeng tang3对 如 下 关 键 字 序 列 (3, 8, 85, 12, 37, 50)按 堆 排 序 算 法 进 行 从 小 到 大 排 序 , 要求画出排序全过程的示意图。建初始堆输出 3 ,85 与 3 交换 重建堆812 37855033812 37508585812 3750381285 375033712 50 1237 5

24、0重建堆 输出 8 ,37 与 8 交换输出 12 ,12 与 85 交换 重建堆输出 37,37 与 50 交换 重建堆输出 85输出 50,50 与 85 交换排序结果:3 8 12 37 50 854举例说明排序章介绍的各排序方法中哪些是不稳定的?不稳定排序:快速排序 直接选择排序 堆排序85 8 385 38853812503781250378535012 38378550381237858538123750例:快速排序初始状态 40 65 38 49 97 65 13 60排序后 13 38 40 49 60 65 65 97堆排序初始状态 65 38 75 97 80 13 27 65排序后 13 27 38 65 65 75 80 97直接排序初始状态 40 65 38 49 97 65 13 60排序后 13 38 40 49 60 65 65 97

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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