吴文虎程序设计12.pptVIP

  • 6
  • 0
  • 约6.19千字
  • 约 45页
  • 2017-07-29 发布于浙江
  • 举报
吴文虎程序设计12

1、前序法: 1.1 先访问根结点; 1.2 遍历左子树; 1.3 遍历右子树; 2、中序法: 2.1 遍历左子树; 2.2 访问根; 2.3 遍历右子树; 3、后序法 3.1 遍历左子树; 3.2 遍历右子树; 3.3 访问根; 我们就以中序法为例研究如何遍历二叉树。仍然采用递归算法。令指针p指向二叉树的根结点 定义树的结构 struct TREE { int data; struct TREE *L, *R; }; 定义p为TREE结构的指针 struct TREE *p; 让LNR(P)为对以p为根的树作中序遍历的子函数。可得出如下图所示的递归算法与或结点图 * * 第十二讲 链表插入结点 链表插入结点 原则: 1、插入操作不应破坏原链接关系 2、插入的结点应该在它该在的位置。应该有一个插入位置的查找子过程。 5 head 6 10 null 15 12 8 先看下面一个简单的例子:已有一个如图所示的链表。它是按结点中的整数域从小到大排序的。现在要插入一个结点,该节点中的数为10。 待插入结点 此结点已插入链表 // 结构7.c #include stdio.h // 预编译命令 #include malloc.h // 内存空间分配 #define null 0 // 定义空指针常量 #define LEN sizeof(struct numST) // 定义常量,表示结构长度 struct numST // 结构声明 { int num; // 整型数 struct numST *next; // numST结构指针 }; 参考程序 // 被调用函数insert(),两个形参分别表示链表和待插入的结点 void insert (struct numST **phead, struct numST *p) { // 函数体开始 struct numST *q,*r; // 定义结构指针q,r if ((*phead)==null) // 第一种情况,链表为空 { *phead = p; // 链表头指向p return; // 完成插入操作,返回 } else // 链表不为空 { // 第二种情况,p结点num值小于链表头结点的num值 if ( (*phead)-num p-num ) { // 将p结点插到链表头部 p-next = *phead;// 将p的next指针指向链表头(*phead) *phead = p; // 将链表头赋值为p return; // 返回 } // 第三种情况,循环查找正确位置 r = *phead; // r赋值为链表头 q = (*phead)-next; // q赋值为链表的下一个结点 while (q!=null) // 利用循环查找正确位置 { // 判断当前结点num是否小于p结点的num if (q-num p-num) { r = q; // r赋值为q,即指向q所指的结点 q = q-next;// q指向链表中相邻的下一个结点 } else // 找到了正确的位置 break; // 退出循环 } // 将p结点插入正确的位置 r-next = p; p-next = q; } } // 被调用函数,形参为ST结构指针,用于输出链表内容 void print(struct numST *head) { int k=0; // 整型变量,用于计数 struct numST * r; // 声明r为ST结构指针 r=head; // r赋值为head,即指向链表头 while(r != null) // 当型循环,链表指针不为空则继续 { // 循环体开始 k=k+1; // 计数加1 printf(%d %d\n,k,r-num); r=r-next; // 取链表中相邻的下一个结点 } // 循环体结束 } void main() // 主函数开始 { // 函数体开始 struct numST *head, *p;// ST型结构指针 head = null; // 初始化head为null // 分配3个ST结构的内存空间,用于构造链表 head = (struct numST *) malloc(LEN); head-next = (str

文档评论(0)

1亿VIP精品文档

相关文档