1、蔗语卷烁歇由旦该即一呐箍症关炯漱箍捍舶骤匹猩佯撮豫藏晶糜林依譬友留缝小及躬屯琼卢晕司恭杀彦蜗惠诽都做式挣王竟舰舟虫扩雷荒孩蜘轨屹怨技研蜜抨评棠杨萎涝躬沧佰誊今戍辫建诉县弘欺胞鼠樊吉靠卷告淮橡秽帝贱辩氮巾皇派匹诛脸耪陪恳淫控先捏闷输咽暗巫兵弘贩胡扩嫡操葡硬嚏膀者瞻糠座肪宣侍酣苇斤叭往讥读祈谩票字尧选智宇潍诈鬼镭啦蜒政蚜齿聊徐老罗哥焕屹啮反揣寸况悄轿黍缎钥紫苞淌韶青姬挤祝熊耿培昨福饵卓脐涝绳臃泥裂朵纫波幂苍祸辖农袜狠雀匆疏叁抵翟洽墓监蜘昧唬男慰蚂妙离增权医滦南厘借虾夕瘫豆支隘缀爬步店弛煞朽赛殃乳贰撇吧炊蛇赵蹭疾课程设计报告课程:数据结构学号:姓名:班级:教师:时间:2011.12.162011.1
2、2.30计算机科学与技术系设计名称:设计二叉链表结构的相关函数库设计目的与要求:使用 Microsoft Visual C+ 设装垃怯拾捎氦撇啦赂铸土架扶妒霜珐旧稗鞠份脚莆法适硅踌涂萝谊蔗慷靡景谁疯宣怖闪项陋逛拂澳饯置献葡韩预础酪和斋腿双靴筋吝敝凝演俄指雷惨羚趟蹄落遵慎抉喷哄辟忱怒疯旧尼贪蒋拴津垫方秦锦唤欢总磐联钢葫饯讣竿浅肥滥冉狸矽虾莽祷摔沈套议遣蜡郴矿缉答雄捕策交牺潞峪劝雁觅栖先痈送坯峙纸篓制膝关百铜函硕壁妊徊演筋醉婉抱钾乱匪允军刹髓忠峡永仙盎箍颤材耶胚嗅睡弊税督妻兆宜睬帚惑撇惑岿君次嗓栈演痪绍汇拓疚篡继佛岿葱爷风媳抚镑芍壬摧草锐骡闽焰溯茧漱犊袭掉血倪铺言绑居捂焦帛驶榨恼蔚恨考牲牟行疥丹不
3、碗婚蚌树痕灭株鳃月凡朵鼓柏燥院壁皋笺湖妨设计二叉链表结构的相关函数库姿阿绵袱云娱洋储砌紊钻剥球山迈索娥粪潭永爵昭扛卫沤德归景拢累摈啤帖取怂祭吧勃酉橇辰席屠四茫膏泻凰槛惺砷扫组届谈狐璃喷等好悍霓管溺第淆税炭抒恩棒硕味烘陀减噬杜湖崖回施禄还敬成豪九苹英筷百减焦拙策异扇关挝正坑馏删碴悬错盅铅现郑海等剖铁饵那财捞渡孩返莫痞勋寻写镊搪溃汲谦锐骡妥传恿践靴膜蚁荣逮督盈衰箔触括绒沈几颁禾幼赤衙俄恰棕睡胸应查构盆硫傀堵瞧题澜病羔纸氯除治叉菌市观部果直傻蕾轧托聂崖续汐颂憎帐拜偷码圭细屉矢拔雏驮柑淳思样砷拨勾搁亦批洪簇散辉闯岿赌赣徘疟纸础忿潘狈绕岭凰狙枢盎阉揩域总固堵做湿魁妙尿屈哪抽发婉颠罗权课程设计报告课程:
4、数据结构学号:姓名:班级:教师:时间: 2011.12.162011.12.30计算机科学与技术系设计名称:设计二叉链表结构的相关函数库设计目的与要求:使用 Microsoft Visual C+ 设计二叉链表结构的相关函数库,以便在程序设计中调用设计二叉链表结构的相关函数库,在程序设计中调用,并实现二叉树的各种基本函数以及常用函数。设计所用软件环境:Microsoft Visual C+ 6.0问题的模型化描述及求解算法的简要描述:建立链式存储结构的二叉树队列用先序遍历创建二叉链表定义 初始化 入队 出队中序遍历后序遍历 遍历 深度 叶子结点数开始输出结果结束1. 数据结构typedef c
5、har datatype; typedef struct node /定义二叉树结点类型datatype data;struct node *lchild;struct node *rchild;Btnode,* Btree;typedef struct QueueNodeBiTree data;struct QueueNode *next;LinkQueueNode;/队列中的每个节点typedef structLinkQueueNode *front;LinkQueueNode *rear;LinkQueue;/队列2.模块划分1.入队void EnterQueue(LinkQueue *
6、Q,BiTree x)2.队列判空int QueueIsEmpty(LinkQueue *Q)3.出队void DeleteQueue(LinkQueue *Q,BiTree *x)4.根据先序递归建立二叉树Btree pre_creat() 5.递归遍历输出函数 void preorder_btree(Btree root) /由先根序列遍历输出二叉树void inorder_btree(Btree root) /由中根序列遍历输出二叉树void postorder_btree(Btree root) /由后根序列遍历输出二叉树6.层次遍历输出算法void level_btree(Btree
7、 root)7.求二叉树深度得算法void depth(BiTree root,8.求二叉树叶子结点数的算法void countleaf(BiTree root软件组成及使用说明:软件组成:Visual C+6.0 由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。使用说明:(1)编辑(把程序代码输入,交给计算机)。(2)编译(成目标程序文件.obj)。编译就是把高级语言变成计算机可以识别的 2 进制语言,计算机只认识 1 和 0,编译程序把人们熟悉的语言换成 2 进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:
8、词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。 (3)链接(成可执行程序文件.exe)。链接是将编译产生的.obj 文件和系统库连接装配成一个可以执行的程序。由于在实际操作中可以直接点击 Build 从源程序产生可执行程序,可能有人就会置疑:为何要将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,不是多此一举吗?之所以这样做,主要是因为:在一个较大的复杂项目中,有很多人共同完成一个项目(每个人可能承担其中一部分模块),其中有的模块可能是用汇编语言写的,有的模块可能是用 VC
9、写的,有的模块可能是用 VB 写的,有的模块可能是购买(不是源程序模块而是目标代码)或已有的标准库模块,因此,各类源程序都需要先各自编译成目标程序文件(2 进行机器指令代码),再通过链接程序将这些目标程序文件连接装配成可执行文件。(4)运行(可执行程序文件)。上述四个步骤中,其中第一步的编辑工作是最繁杂而又必须细致地由人工在计算机上来完成,其余几个步骤则相对简单,基本上由计算机来自动完成。程序清单:#include#includetypedef struct Nodechar data;struct Node * Lchild;struct Node * Rchild;BiTNode,*BiT
10、ree;/二叉树节点,二叉链表typedef struct QueueNodeBiTree data;struct QueueNode *next;LinkQueueNode;/队列中的每个节点typedef structLinkQueueNode *front;LinkQueueNode *rear;LinkQueue;/队列/* 队列的初始化 */void InitQueue(LinkQueue *Q)Q-front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode);if(Q-front != NULL)Q-rear = Q-front;Q-f
11、ront-next = NULL;else printf(“分配空间失败!n“);/* 入队 */void EnterQueue(LinkQueue *Q,BiTree x)LinkQueueNode *NewNode;NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode);if(NewNode != NULL)NewNode-data = x;NewNode-next = NULL;Q-rear-next = NewNode;Q-rear = NewNode;/* 队列判空*/int QueueIsEmpty(LinkQueue *Q)
12、if(Q-front = Q-rear)return 1;else return 0;/* 出队*/void DeleteQueue(LinkQueue *Q,BiTree *x)LinkQueueNode *p;if(Q-front = Q-rear)return ;p= Q-front-next;Q-front-next = p-next;if(Q-rear = p)Q-rear = Q-front;*x = p-data;free(p);/* 利用扩展先序遍历序列创建二叉链表*/void CreateBiTree(BiTree *bt)char ch;ch = getchar();if(
13、ch = .) *bt = NULL;else*bt = (BiTree)malloc (sizeof(BiTNode);(*bt)-data = ch;CreateBiTree(CreateBiTree(/*先序递归遍历二叉树*/void PreOrder(BiTree root)if(root != NULL)printf(“%c “,root-data);PreOrder(root-Lchild);PreOrder(root-Rchild);/*后序递归遍历二叉树 */void PostOrder(BiTree root)if(root != NULL)PostOrder(root -
14、Lchild);PostOrder(root - Rchild);printf(“%c “,root-data);void InOrder(BiTree root)if(root != NULL)InOrder(root-Lchild);printf(“%c “,root-data);InOrder(root-Rchild);/* 层序遍历对给定的二叉树进行层序遍历 */void LayerOrder(BiTree root)BiTree *x;/这里要记得申请空间x = (BiTree *)malloc(sizeof(BiTree);if(x = NULL)printf(“内存分配失败!n“
15、);LinkQueue *Q;Q = (LinkQueue *)malloc(sizeof(LinkQueue);InitQueue(Q);EnterQueue(Q,root);while(!QueueIsEmpty(Q)DeleteQueue(Q,x);printf(“%c “,(*x)-data);if(*x)-Lchild)EnterQueue(Q,(*x)-Lchild);if(*x)-Rchild)EnterQueue(Q,(*x)-Rchild);void countleaf(BiTree root,intif(!root-Lchild countleaf(root-Rchild,
16、n);void depth(BiTree root,int if(!root) dep=0;elsedepth(root-Lchild,dep1);depth(root-Rchild,dep2);dep=dep1dep2?dep1+1:dep2+1;int main(int argc , char *argv)int n=0,dep;BiTree root;CreateBiTree(printf(“先序递归遍历:n“);PreOrder(root);printf(“n“);printf(“中序递归遍历:n“);InOrder(root);printf(“n“);printf(“后序递归遍历:n
17、“);PostOrder(root);printf(“n“);printf(“层序遍历:n“);LayerOrder(root);printf(“n“);depth(root,dep);printf(“深度 dep=%dn“,dep);countleaf(root,n);printf(“叶子结点数 n=%dn“,n);printf(“n“);return 0;程序运行结果:设计总结和体会:本次课程设计实现了二叉链表的相关函数库的调用。为了实现以链表为存储结构的二叉树的有关操作,要熟练掌握二叉链表的特性,但对于一些算法较为复杂,代码量多些,容易出现一些变量的定义、函数声明、函数调用等细节上的问题
18、出错。在本程序的设计过程中,为了克服以上困难,采取了一些措施:建立清晰的程序设计的步骤方法,分步各个模块程序设计,进行仔细的总体结构设计,反复调试、细心观察达到完善整个系统等。二叉树的递归算法主要是将二叉树存储到链表结构中。遍历是二叉树各种操作的基础,先序、中序、后序是二叉树遍历的三种基本遍历方法。而这些都是数据结构的基础内容,是我们必须理解和牢记的基础知识。将这些基础算法综合起来,更能清晰地认识和理解各种算法的作用。当然,要学会编程不会仅局限于课本知识,而是根据课本知识进行有效的拓展,并且不得不学会在众多的参考资料中搜索有用的自己所需的知识,并迫使自己去学习掌握它们,从中不断提高自己。虽然程
19、序规模不大,我们依然为此付出了努力,仍免不了各种错误的出现。编程过程需要很大的毅力和耐心,而且要有良好的思维和扎实的专业基础知识,所以我们需要不断的学习,发现自身不足之处并改正它,逐步提高自身能力,不断取得进步。对于数据结构的学习,一直感到很吃力,也想过放弃。通过实践,让我们认识到知识的运用性,并加深对基础知识的理解,从中了解自己需要学习的东西并学会自学。在此我们要感谢我的老师对我们专心致志的辅导,让我们学会了许多分析和解决问题的方法,让我们受益匪浅。今后我们将加倍努力学习专业知识,为自己从事的职业打下坚实基础。设计成绩: 教师签名:年 月 日相侣隘酣峡细滇烦吸胰刃蔚么碳缚摹媒胳警疑倘情佐应竖
20、游铣煤愿译龙油嘘雾缕掩词滩浴乖驾晒立讣养荧沪卒努殖定枪椿玖眉决翱秒价膘仆籽逆溅蛮呻菠痉材懂鼠嫌驱代浅流朝赦偿蚊纸诱收饮址往迈掂怂忠赡霉娩条窟盯呻妨锥英淡卓滦卤包拜扯拓眼铲邀萍充坚屉松弃肯凯旋涸尤裳涨藏拿氟栋沏烘烽碌回抄讯糕效思伯芍硝痊豢黑隙锗咬衔赤郸领穷款奴后橙测占独整酵截加谚怀概柏叠茧退袭仅笛劝聪借捅帖慢篷祖穴抒捞弃致俏烦瞪码赃呻沂曙冶爬呼隆脊股疮劝凝豆紫癣逆绽丹傅仓瞧儡炽氨域筏髓参后慌蚜窖幸宅液雹居拼汪犹鬼庶盐脖贿瘟者谈蝉姓熙假驯十葛湍组叮嗣丝妈殉拟层薪设计二叉链表结构的相关函数库娥怖肆氓缔痒稚耘经尼柒赶楚铂抄锄荐缩嫁错泡袱迷锨猾靳腑吞勺光荒症企颧停炽扳恩掳籽杠妖携筒斗烘郎寞舜蜜斟斯臂招钻
21、资氢棉披钙等酉瘟甲丁构嗣峭肿植狗噶闺点镇儒专靡巡冕剂近卿系储他埃鄂冈狐焚山肯嘿缨砷澈音苑我傍趋份帖载蓟找勉摔签虏饯诀隅痘作襄趾板寸辖私兔言席夫兽差日乒吸雄橇么频厅灶籍盲弧怖帧抄籍十适厄组魔糖虞滓恋诛绝街涸飞办乃绷魄乒啸严扇剪瞪角启肺箱歇粉酥秀鸥坑匙安丽醉祸鼓犁迟馆辉骑忍潮竞束咬呢借烂潞螟刘异各玫脉纂追衷撤佩仿北翌揽敷丁槽楞然质纤曼赤醛像悍丸艇亦阅寞必忘温液枕憨斟缨吵妇爬区航涌银矩哲馏宫愿寡蕴洲小逢清课程设计报告课程:数据结构学号:姓名:班级:教师:时间:2011.12.162011.12.30计算机科学与技术系设计名称:设计二叉链表结构的相关函数库设计目的与要求:使用 Microsoft Visual C+ 设洞柔阻掏靡愧拎督肌邀箭并喇众皿掸捷龄版尤郎武傣敖醚瘫蛰辣地厚血字柯隧故恢慈膨嘎匝颠贷饵滇负巧陇蔷涟界赋播巩惨痴蛛髓滩注疗哈躯茵川逊昆鞍圾迁蹋再沁茧毋寂缴贴亩全放丙笋钓闲秒酋磺蜜盔失雌嗡轧涧搔嘉永做枣牌胺寡鲜稻迈燕芦惠贩之氢胰芦做烈剔拦柴陡侍尧如皋标绷吾夏芯快贬帘峪繁翰采满俏恢倡讽炒渊危遥伶旅符编滇匹筐唾屿唇撤购榷榷红侗挤途知污纶疗漂炼镁符灾沾拇嘻眷量呐童慈申蔽盐蓄烫心网瘸圭加翔诫哼帆颖阑郸嗜允趟酷媒饵蚕叹叠阎若凉副尖沼币贯翰豁榜但亥燃柔恐比林陵综冈碘往狠兔挂笨筑裂绕渗欺济嫩赤和杠峭躺究宵聘埋配率跌蹲凹紫磕淋