ImageVerifierCode 换一换
格式:DOCX , 页数:125 ,大小:41.29KB ,
资源ID:4042072      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4042072.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构Word格式文档下载.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据结构Word格式文档下载.docx

1、lchild); / 销毁左孩子子树 rchild) / 有右孩子 rchild); / 销毁右孩子子树 free(*DT); / 释放根结点 / 空指针赋0 BiTree SearchBST(BiTree T,KeyType key) / 在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 / 若查找成功,则返回指向该数据元素结点的指针,否则返回空指针 if(!T) | key = T-data.key) return T;else if (key return SearchBST(T-lchild,key);elserchild,key);Status SearchBST1(

2、BiTree T,KeyType key,BiTree f,BiTree *p) / 若查找成功,则返回指针p指向该数据元素指针结点,并返回TRUE,否则指针p / 指向查找路径上访问的最后一个结点并返回FALSE,指针f指向T的双亲,其初始调用值为NULL if (!T) *p = f;return false;else if (key = T-*p = T;return SearchBST1(T-lchild,key,T,p);rchild,key,T,p);int InsertBST(BiTree *T,ElemType e) BiTree p,s;SearchBST1(*T,e.key

3、,NULL,&p) / 查找不成功 s = (BiTree)malloc(sizeof(BiTNode);s-data = e;lchild = s-rchild = NULL;p) *T = s; / 被插结点*s为新的根结点 else if (e.key p-lchild = s; / 被插结点*s为左孩子,值小的在左边 rchild = s; / 被插结点*s为右孩子,值小的在右边 / 书中已经有关键字相同的结点,不再插入 Status Delete(BiTree *p) / 从二叉排序树中删除结点p,并重接的左或右子树 BiTree q,s;(*p)-rchild) / 右子树空则只需

4、重接他的左子树 q = (*p);*p = (*p)-lchild;free(q);else if (!lchild) / 只需重接他的右子树 rchild;/ 左右子树均不空 P230 方式d q = *p; s = (*p)-while(s-rchild) q = s;s = s-data = s-data;/ s指向被删结点的前驱(将被删结点前驱的值取代被删结点的值) if (q!=*p) / 此种情况是指类似只有左右两个子结点的情况,类似情况下不需改变p-data已经完成所需改变 q-rchild = s-free(s);Status DeleteBST(BiTree *T,KeyTy

5、pe key) / 若二叉排序树T存在关键字等于key的数据元素的时候,则删除该数据元素结点 / 并返回true,否则返回false *T) if (key = (*T)-return Delete(T); (*T)-return DeleteBST(&(*T)-DeleteBST(&return 1;void TraverseDSTable(BiTree DT,void(*Visit)(ElemType) if (DT) TraverseDSTable(DT-lchild,Visit); / 先中序遍历左子树 Visit(DT-data); / 再访问根结点 rchild,Visit); /

6、 最后中序遍历右子树 void print(ElemType c) printf(%d,%d),c.key,c.others);int main() BiTree dt,p;int i;KeyType j;ElemType rN= 45,1,12,2,53,3,3,4,37,5,24,6, 100,7,61,8,90,9,78,10 ; / 以教科书P227图9.7(a)为例InitDSTable(&dt); / 构造空表 for(i=0;i#define TRUE 1 #define FALSE 0 #define OK#define ERROR 0 #define INFEASIBLE -

7、1 #define OVERFLOW -2 #define ElemType int #define Status int #define LIST_INIT_SIZE 100 / 线性表存储空间的初始分配量 #define LISTINCREMENT 10 / 线性表存储空间的分配增量 typedef struct LNode ElemType data; / 存储的数据 struct LNode *next; / 后继的结点指针 LNode,*LinkList;void InitList(LinkList *L) / InitList_L即CreateList_L / 顺序(头插法)n个元

8、素的值,建立带表头结点的单链线性表L LNode *p;(*L) = (LinkList)malloc(sizeof(LNode);(*L)-next = NULL; / 先建立一个带头结点的单链表 / InitList int ListLength(LinkList L) / 计算链表长度 int i=0;LinkList p = L-next;while(p) i+; / 存在加1 p = p- / 指向下一个结点 return i; / ListLength Status GetElem(LinkList L,int i,ElemType *e) int j;/ L为带头结点的单链表的头

9、指针 / 当第i个元素存在时,其值赋给e并返回OK,否则返回false p = L- j = 1; / 初始化,p指向第一个结点,j为计数器 while(p & j i) return ERROR; / 第i个元素不存在 *e = p- / 取第i个元素 return OK; / GetElem Status ListInsert(LinkList *L,int i,ElemType e) LinkList p; int j;LinkList s = (LinkList)malloc(sizeof(LNode); / 生成新结点 / 在带头结点的单链线性表L中第i个位置之前插入元素e p =

10、(*L); j = 0; i-1) / 寻找第i-1个结点 p|ji-1) / i小于1或者大于表长+1 s-next = p- / 插入L中 next = s; / ListInsert Status ListDelete(LinkList *L,int i,ElemType *e) LinkList p,q;/ 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 while(p-next & j / 删除位置不合理 q = p-next = q- / 删除并释放结点 *e = q- free(q); / ListDelete void Output(LinkList L) int

11、e,i = 1;int length = ListLength(L);for( i;=length;+i) GetElem(L,i,&e);%d ,e);/ 输出空集 length) Empty/ 算法6.15 P150 / 线性表A表示集合A,线性表B表示幂集(A)的一个元素。/ 局部量k为进入函数时表B的当前长度。/ 第一次调用本函数时,B为空表,i1。void GetPowerSet(int i, LinkList A, LinkList *B) ElemType x;int k;if (i ListLength(A) Output(*B); / 输出当前B值,即(A)的一个元素 els

12、e GetElem(A, i, &x);k = ListLength(*B);ListInsert(B, k+1, x);GetPowerSet(i+1, A, B);ListDelete(B, k+1, &int main() int n,i;ElemType e;LinkList a,b;请输入集合A的元素个数:n);InitList(&a);请输入集合中的元素:for(i=1;=n;i+) ListInsert(&a,i,e);b);进行冥集合运算!GetPowerSet(1, a, &/* 请输入集合A的元素个数:3 请输入集合A的元素:(空格区分) 1 2 3 */Haffman树(

13、最优二叉树)的线性实现memory.hlimits.hunsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; / 动态分配数组存储赫夫曼数 typedef char* HuffmanCode; / 动态分配数组存储赫夫曼编码树 / 函数void select()调用 int min1(HuffmanTree t,int i) int j,flag;unsigned int k=UINT_MAX; / 取k为不小于可能的值 for(j = 1;= i; j+) if(tj.weight *s2) j=*

14、s1;*s1=*s2;*s2=j;void HuffmanCoding_FromLeaf(HuffmanTree *HT,HuffmanCode *HC,int *w,int n) / w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC int m,s1,s2,i,start;unsigned int c,f;HuffmanTree p;char * cd;if (n = 1) return;m = 2*n-1;*HT = (HuffmanTree)malloc(m+1)*sizeof(HTNode); / 0号单元未用 for (p = *HT+1,i=1;+i,+p,+w) (*p).weight=*w;(*p).parent=0;(*p).lchild=0;(*p).rchild=0;for(;=m;+i,+p) /初始化双亲位置 for (i = n+1;i / 建赫夫曼树 / 在HT1.i-1 Select(*HT,i-1,&s1,&s2);(*HT)s1.parent = i; (*HT)s2.parent = i;(*HT)i.lchild = s1; (*HT)i.rchild = s2;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2