﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我的编程乐园-文章分类-数据结构和算法分析</title><link>http://www.cppblog.com/deercoder/category/11913.html</link><description>思考至上</description><language>zh-cn</language><lastBuildDate>Fri, 27 Nov 2009 17:55:18 GMT</lastBuildDate><pubDate>Fri, 27 Nov 2009 17:55:18 GMT</pubDate><ttl>60</ttl><item><title>改正的二叉树操作</title><link>http://www.cppblog.com/deercoder/articles/102117.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102117.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102117.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102117.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102117.html</trackback:ping><description><![CDATA[二叉树的实验操作：<br>题目如下：<br>1．设某二叉树的结点类型为整数类型，以二叉链表形式作为存储结构。试编程实现：<br>(1) 生成一棵二叉树.<br>(2) 用递归算法、非递归算法实现二叉树的遍历；<br>(3) 求度分别为0、1、2的结点的数目,分别用递归算法、非递归算法实现；<br>(4) 按层次遍历二叉树(提示：使用一个队列实现）；<br>*(5) 求二叉树的高度(深度)；<br>*(6) 判断是否为完全二叉树，输出'Yes!'/'No!'；<br>*(7) 交换每个结点的左右子树；<br>*(8) 对交换左右子树后的二叉树作中序遍历。<br><span style="FONT-WEIGHT: bold">#include&lt;stdio.h&gt;<br>#include&lt;conio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#include&lt;string.h&gt;<br>#define ERROR&nbsp;<wbr> 0<br>#define OK&nbsp;<wbr> 1<br>#define OVERFLOW -2<br>#define queuesize 20<br>typedef struct BiTNode{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>struct BiTNode *lchild,*rchild; //左右孩子指针<br>}BiTNode,*BiTree;<br>typedef struct Queue{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int front ,rear ;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree data[queuesize]; //循环队列元素类型为二叉链表结点指针<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int count;<br>}Queue; //循环队列结构定义<br><br>int CreateBiTree(BiTree * T) { //声明的就是一个BiTree类型的指针,通过修改来对main中的T做修改，然后使其指向根结点<br>&nbsp;<wbr> // 按先序次序输入二叉树中结点的值（一个字符），空格字符表示空树，<br>&nbsp;<wbr> // 构造二叉链表表示的二叉树T。<br>&nbsp;<wbr> int ch;<br>&nbsp;<wbr> printf("请输入一个根结点的值（如果为空，则输入0）\n");<br>&nbsp;<wbr> scanf("%d",&amp;ch);<br>&nbsp;<wbr> if (ch==0) (*T)= NULL;<br>&nbsp;<wbr> else {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if (!(*T = (BiTNode *)malloc(sizeof(BiTNode))))&nbsp;<wbr> return ERROR;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> (*T)-&gt;data = ch;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 生成根结点<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CreateBiTree(&amp;(*T)-&gt;lchild);&nbsp;<wbr>&nbsp;<wbr> // 构造左子树<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CreateBiTree(&amp;(*T)-&gt;rchild);&nbsp;<wbr>&nbsp;<wbr> // 构造右子树<br>&nbsp;<wbr> }<br>&nbsp;<wbr> return OK;<br>} // CreateBiTree<br><br>int PreOrderTraverse(BiTree T) //用递归算法写的遍历函数，按照先序遍历，同时输出结点的值<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d&nbsp;<wbr> ",T-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br><br>int InorderTraverse(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>InorderTraverse(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d ",T-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>InorderTraverse(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br>int PreOrderTraverse2(BiTree T)&nbsp;<wbr> //用非递归的算法写的遍历函数，按照先序遍历，同时输出结点的值<br>{<br>&nbsp;<wbr>&nbsp;<wbr> BiTree p,s[20];<br>&nbsp;<wbr>&nbsp;<wbr> int top=0;<br>&nbsp;<wbr>&nbsp;<wbr> p=T;<br>&nbsp;<wbr>&nbsp;<wbr> while((p!=NULL)||(top&gt;0))<br>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("%d ",p-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> s[++top]=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=s[top--];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br><br>int get_all_node(BiTree T)&nbsp;<wbr> //求出总的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr> BiTree p,s[20];<br>&nbsp;<wbr>&nbsp;<wbr> int num_node=0;<br>&nbsp;<wbr>&nbsp;<wbr> int top=0;<br>&nbsp;<wbr>&nbsp;<wbr> p=T;<br>&nbsp;<wbr>&nbsp;<wbr> while((p!=NULL)||(top&gt;0))<br>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> num_node++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> s[++top]=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=s[top--];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return num_node;<br>}<br><br>int get_node0_1(BiTree T)//利用递归算法得到度为0的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num1,num2;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if((T-&gt;lchild==NULL)&amp;&amp;(T-&gt;rchild==NULL))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>num1=get_node0_1(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> num2=get_node0_1(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return (num1+num2);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>}<br>int get_node0_2(BiTree T) //利用非递归算法，同时采用层次遍历的方法，得到度为0的结点 &nbsp;<wbr><br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Queue *q;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p=T;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int num=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q=(Queue *)malloc(sizeof(Queue));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;front=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;data[q-&gt;rear]=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> while(q-&gt;front &lt; q-&gt;rear)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p=q-&gt;data[q-&gt;front];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;front++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(p-&gt;lchild==NULL &amp;&amp; p-&gt;rchild==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> num++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(p-&gt;lchild!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;data[q-&gt;rear]=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(p-&gt;rchild!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;data[q-&gt;rear]=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return num;<br>}<br><br>int get_node1(BiTree T) //利用总的关系求出度为1的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num=get_all_node(T)-2*get_node0_1(T)+1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return num;<br>}<br>int get_node1_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //非递归算法，同时利用关系求度为1的结点。<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num=get_all_node(T)-2*get_node0_2(T)+1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return num;<br>}<br>int get_node2(BiTree T) //利用度为2的结点个数与度为0的结点个数的关系得到<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num=get_node0_1(T)-1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return num;<br>}<br>int get_node2_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //非递归算法，同时利用关系求度为2的结点。<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num=get_node0_2(T)-1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return num;<br>}<br>int get_node(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int get;<br>&nbsp;<wbr>&nbsp;<wbr> printf("请输入你要查找的结点的度\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("1.查询度为0的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("2.查询度为1的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("3.查询度为2的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> switch(get){<br>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为0的所有结点的个数是%d\n",get_node0_1(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("度为1的所有结点的个数是%d\n",get_node1(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("度为2的所有结点的个数是%d\n",get_node2(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br>int get_node_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //利用非递归算法的实现<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int get;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("下面是用非递归算法来查询\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("请输入你要查找的结点的度\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("1.查询度为0的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("2.查询度为1的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("3.查询度为2的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> switch(get){<br>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为0的所有结点的个数是%d\n",get_node0_2(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("度为1的所有结点的个数是%d\n",get_node1_1(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("度为2的所有结点的个数是%d\n",get_node2_1(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br>int LevelOrder(BiTree T)<br>{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Queue *q;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int flag=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //定义flag为层号<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q=(Queue *)malloc(sizeof(Queue));&nbsp;<wbr> //申请循环队列空间<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear=q-&gt;front=q-&gt;count=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //将循环队列初始化为空<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;data[q-&gt;rear]=T;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;count++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear=(q-&gt;rear+1)%queuesize;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //将根结点入队<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> while (q-&gt;count)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不为空，做以下操作<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(q-&gt;data[q-&gt;front]){&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //当队首元素不为空指针，做以下操作<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p=q-&gt;data[q-&gt;front];&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //取队首元素*p<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("%d ",p-&gt;data);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //打印*p结点的数据域信息<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> ++flag;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;front=(q-&gt;front+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;count--;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //队首元素出队<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if (q-&gt;count==queuesize)//若队列为队满，则打印队满信息，退出程序的执行<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("the queue full!\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不满，将*p结点的左孩子指针入队<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;count++;q-&gt;data[q-&gt;rear]=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear=(q-&gt;rear+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //enf of if<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if (q-&gt;count==queuesize)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列为队满，则打印队满信息，退出程序的执行<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("the queue full!\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不满，将*p结点的右孩子指针入队<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;count++;q-&gt;data[q-&gt;rear]=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;rear=(q-&gt;rear+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of if<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of if<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //当队首元素为空指针，将空指针出队<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;front=(q-&gt;front+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> q-&gt;count--;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> return OK;<br>}&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of LevelOrder<br><br>int height(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>BiTree p=T;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int a,b;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(p==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if((p-&gt;lchild==NULL)&amp;&amp;(p-&gt;rchild==NULL))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return 1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> a=height(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> b=height(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> if(a&gt;b)&nbsp;<wbr>&nbsp;<wbr> return (a+1);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> else&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return (b+1);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>}<br><br>int judge(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //采用递归算法来实现判断是否为完全二叉树<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T ==NULL) &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 0; &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T-&gt;lchild == NULL &amp;&amp; T-&gt;rchild== NULL) &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 1;&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T-&gt;lchild&nbsp;<wbr> == NULL&nbsp;<wbr> &amp;&amp; T-&gt;rchild != NULL||T-&gt;lchild!=NULL &amp;&amp;T-&gt;rchild==NULL) &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 0; &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> judge(T-&gt;lchild) &amp; judge(T-&gt;rchild); &nbsp;<wbr><br><br>}<br><br>int exchange(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p=T;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int exch;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(p==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(p-&gt;lchild!=NULL &amp;&amp; p-&gt;rchild!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> exch=p-&gt;lchild-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p-&gt;lchild-&gt;data=p-&gt;rchild-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p-&gt;rchild-&gt;data=exch;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> exchange(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> exchange(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(p-&gt;lchild==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> exchange(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> exchange(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> return OK;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>}<br><br>void main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>BiTree T;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //定义一个指向BiTNode结点的指针<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int choice;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>do{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("请选择操作：\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("1.按照先序的次序生成一颗二叉树\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("2.递归算法实现二叉树的先序遍历，输出各结点值\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("3.用非递归算法实现二叉树的遍历，输出各结点值\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("4.求度分别为0、1、2的结点的数目（递归算法实现）\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("5.求度分别为0、1、2的结点的数目（非递归算法实现）\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("6.按层次遍历二叉树\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("7.求二叉树的高度(深度)\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("8.判断是否为完全二叉树，输出\"Yes!\"或\"No!\"\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("9.交换每个结点的左右子树,并用先序遍历的方式输出\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("10.对交换左右子树后的二叉树作中序遍历\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("11.退出\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>scanf("%d",&amp;choice);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>switch(choice){<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 1:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>CreateBiTree(&amp;T);&nbsp;<wbr>&nbsp;<wbr> //创建二叉树<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse(T); //利用递归算法的先序遍历，输出结点值<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 3:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse2(T);//利用非递归算法的先序遍历，输出结点值<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 4:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>get_node(T); //利用递归算法得到的各个结点的个数<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 5:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>get_node_1(T);&nbsp;<wbr> //利用非递归算法得到的各个结点的个数<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 6:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LevelOrder(T);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 7:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("二叉树的高度为%d\n",height(T));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 8:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(judge(T)==0)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("No\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("Yes\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 9:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> exchange(T);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> PreOrderTraverse(T);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 10:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> InorderTraverse(T);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}while(choice!=11);&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>}<br><br>注记：原来的那个函数5有问题，即利用非递归算法求叶子结点的个数。<br></span>
<img src ="http://www.cppblog.com/deercoder/aggbug/102117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:48 <a href="http://www.cppblog.com/deercoder/articles/102117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二叉树的操作</title><link>http://www.cppblog.com/deercoder/articles/102109.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102109.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102109.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102109.html</trackback:ping><description><![CDATA[二叉树的实验操作：<br>题目如下：<br>1．设某二叉树的结点类型为整数类型，以二叉链表形式作为存储结构。试编程实现：<br>(1) 生成一棵二叉树.<br>(2) 用递归算法、非递归算法实现二叉树的遍历；<br>(3) 求度分别为0、1、2的结点的数目,分别用递归算法、非递归算法实现；<br>(4) 按层次遍历二叉树(提示：使用一个队列实现）；<br>*(5) 求二叉树的高度(深度)；<br>*(6) 判断是否为完全二叉树，输出"Yes!"/"No!"；<br>*(7) 交换每个结点的左右子树；<br>*(8) 对交换左右子树后的二叉树作中序遍历。<br><br><br>#include&lt;stdio.h&gt;<br>#include&lt;conio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#include&lt;string.h&gt;<br>#define ERROR&nbsp;<wbr> 0<br>#define OK&nbsp;<wbr> 1<br>#define OVERFLOW -2<br>#define queuesize 20<br>typedef struct BiTNode{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>struct BiTNode *lchild,*rchild; //左右孩子指针<br>}BiTNode,*BiTree;<br>typedef struct Queue{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int front ,rear ;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree data[queuesize]; //循环队列元素类型为二叉链表结点指针<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> int count;<br>}Queue; //循环队列结构定义<br><br>int CreateBiTree(BiTree * T) { //声明的就是一个BiTree类型的指针,通过修改来对main中的T做修改，然后使其指向根结点<br>&nbsp;<wbr> // 按先序次序输入二叉树中结点的值（一个字符），空格字符表示空树，<br>&nbsp;<wbr> // 构造二叉链表表示的二叉树T。<br>&nbsp;<wbr> int ch;<br>&nbsp;<wbr> printf("请输入一个根结点的值（如果为空，则输入0）\n");<br>&nbsp;<wbr> scanf("%d",&amp;ch);<br>&nbsp;<wbr> if (ch==0) (*T)= NULL;<br>&nbsp;<wbr> else {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if (!(*T = (BiTNode *)malloc(sizeof(BiTNode))))&nbsp;<wbr> return ERROR;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> (*T)-&gt;data = ch;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 生成根结点<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CreateBiTree(&amp;(*T)-&gt;lchild);&nbsp;<wbr>&nbsp;<wbr> // 构造左子树<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CreateBiTree(&amp;(*T)-&gt;rchild);&nbsp;<wbr>&nbsp;<wbr> // 构造右子树<br>&nbsp;<wbr> }<br>&nbsp;<wbr> return OK;<br>} // CreateBiTree<br><br>int PreOrderTraverse(BiTree T) //用递归算法写的遍历函数，按照先序遍历，同时输出结点的值<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d&nbsp;<wbr> ",T-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>PreOrderTraverse(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br><br>int InorderTraverse(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>InorderTraverse(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d ",T-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>InorderTraverse(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br>int PreOrderTraverse2(BiTree T)&nbsp;<wbr> //用非递归的算法写的遍历函数，按照先序遍历，同时输出结点的值<br>{<br>&nbsp;<wbr>&nbsp;<wbr> BiTree p,s[20];<br>&nbsp;<wbr>&nbsp;<wbr> int top=0;<br>&nbsp;<wbr>&nbsp;<wbr> p=T;<br>&nbsp;<wbr>&nbsp;<wbr> while((p!=NULL)||(top&gt;0))<br>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("%d ",p-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> s[++top]=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=s[top--];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br><br>int get_all_node(BiTree T)&nbsp;<wbr> //求出总的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr> BiTree p,s[20];<br>&nbsp;<wbr>&nbsp;<wbr> int num_node=0;<br>&nbsp;<wbr>&nbsp;<wbr> int top=0;<br>&nbsp;<wbr>&nbsp;<wbr> p=T;<br>&nbsp;<wbr>&nbsp;<wbr> while((p!=NULL)||(top&gt;0))<br>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> num_node++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> s[++top]=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=s[top--];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return num_node;<br>}<br><br>int get_node0_1(BiTree T)//利用递归算法得到度为0的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num1,num2;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(T==NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if((T-&gt;lchild==NULL)&amp;&amp;(T-&gt;rchild==NULL))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>num1=get_node0_1(T-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> num2=get_node0_1(T-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return (num1+num2);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>}<br>int get_node0_2(BiTree T) //利用非递归算法得到度为0的结点<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>BiTree p=T,s[20];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int top=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //定义一个栈<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while((p!=NULL)||(top&gt;0))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>s[++top]=p;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=s[--top];<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(p-&gt;rchild==NULL)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ++num;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return num;<br><br>}<br><br>int get_node1(BiTree T) //利用总的关系求出度为1的结点的个数<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int num=get_all_node(T)-2*get_node0_1(T)+1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return num;<br>}<br>int get_node1_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //非递归算法，同时利用关系求度为1的结点。<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int num=get_all_node(T)-2*get_node0_2(T)+1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return num;<br>}<br>int get_node2(BiTree T) //利用度为2的结点个数与度为0的结点个数的关系得到<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int num=get_node0_1(T)-1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return num;<br>}<br>int get_node2_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //非递归算法，同时利用关系求度为2的结点。<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int num=get_node0_2(T)-1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return num;<br>}<br>int get_node(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int get;<br>&nbsp;<wbr>&nbsp;<wbr> printf("请输入你要查找的结点的度\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("1.查询度为0的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("2.查询度为1的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("3.查询度为2的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> switch(get){<br>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("度为0的所有结点的个数是%d\n",get_node0_1(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为1的所有结点的个数是%d\n",get_node1(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为2的所有结点的个数是%d\n",get_node2(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br>int get_node_1(BiTree T)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //利用非递归算法的实现<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int get;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("下面是用非递归算法来查询\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("请输入你要查找的结点的度\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("1.查询度为0的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("2.查询度为1的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> printf("3.查询度为2的所有结点的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> switch(get){<br>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("度为0的所有结点的个数是%d\n",get_node0_2(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为1的所有结点的个数是%d\n",get_node1_1(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("度为2的所有结点的个数是%d\n",get_node2_1(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br>int LevelOrder(BiTree T)<br>{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Queue *q;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int flag=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //定义flag为层号<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q=(Queue *)malloc(sizeof(Queue));&nbsp;<wbr> //申请循环队列空间<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;rear=q-&gt;front=q-&gt;count=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //将循环队列初始化为空<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;data[q-&gt;rear]=T;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;count++;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;rear=(q-&gt;rear+1)%queuesize;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //将根结点入队<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while (q-&gt;count)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不为空，做以下操作<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(q-&gt;data[q-&gt;front]){&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //当队首元素不为空指针，做以下操作<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=q-&gt;data[q-&gt;front];&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //取队首元素*p<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d ",p-&gt;data);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //打印*p结点的数据域信息<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>++flag;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;front=(q-&gt;front+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;count--;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //队首元素出队<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if (q-&gt;count==queuesize)//若队列为队满，则打印队满信息，退出程序的执行<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("the queue full!\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不满，将*p结点的左孩子指针入队<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;count++;q-&gt;data[q-&gt;rear]=p-&gt;lchild;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;rear=(q-&gt;rear+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //enf of if<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if (q-&gt;count==queuesize)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列为队满，则打印队满信息，退出程序的执行<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("the queue full!\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //若队列不满，将*p结点的右孩子指针入队<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;count++;q-&gt;data[q-&gt;rear]=p-&gt;rchild;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;rear=(q-&gt;rear+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of if<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of if<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else{&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //当队首元素为空指针，将空指针出队<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;front=(q-&gt;front+1)%queuesize;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>q-&gt;count--;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //end of LevelOrder<br><br>int height(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p=T;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int a,b;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(p==NULL)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return 0;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> if((p-&gt;lchild==NULL)&amp;&amp;(p-&gt;rchild==NULL))<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return 1;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> a=height(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> b=height(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(a&gt;b)&nbsp;<wbr>&nbsp;<wbr> return (a+1);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> else&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return (b+1);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>}<br><br>int judge(BiTree T)&nbsp;<wbr>&nbsp;<wbr> //采用递归算法来实现判断是否为完全二叉树<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T ==NULL)&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 0;&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T-&gt;lchild == NULL &amp;&amp; T-&gt;rchild== NULL)&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 1;&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(T-&gt;lchild&nbsp;<wbr> == NULL&nbsp;<wbr> &amp;&amp; T-&gt;rchild != NULL||T-&gt;lchild!=NULL &amp;&amp;T-&gt;rchild==NULL)&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> 0;&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return&nbsp;<wbr>&nbsp;<wbr> judge(T-&gt;lchild) &amp; judge(T-&gt;rchild);&nbsp;<wbr><br><br>}<br><br>int exchange(BiTree T)<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree p=T;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int exch;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(p==NULL)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(p-&gt;lchild!=NULL &amp;&amp; p-&gt;rchild!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> exch=p-&gt;lchild-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p-&gt;lchild-&gt;data=p-&gt;rchild-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p-&gt;rchild-&gt;data=exch;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>exchange(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>exchange(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(p-&gt;lchild==NULL)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>exchange(p-&gt;rchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>exchange(p-&gt;lchild);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>}<br><br>void main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> BiTree T;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //定义一个指向BiTNode结点的指针<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int choice;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> do{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("请选择操作：\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("1.按照先序的次序生成一颗二叉树\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("2.递归算法实现二叉树的先序遍历，输出各结点值\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("3.用非递归算法实现二叉树的遍历，输出各结点值\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("4.求度分别为0、1、2的结点的数目（递归算法实现）\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("5.求度分别为0、1、2的结点的数目（非递归算法实现）\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("6.按层次遍历二叉树\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("7.求二叉树的高度(深度)\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("8.判断是否为完全二叉树，输出\"Yes!\"或\"No!\"\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("9.交换每个结点的左右子树\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("10.对交换左右子树后的二叉树作中序遍历\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("11.退出\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;choice);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> switch(choice){<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CreateBiTree(&amp;T);&nbsp;<wbr>&nbsp;<wbr> //创建二叉树<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PreOrderTraverse(T); //利用递归算法的先序遍历，输出结点值<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PreOrderTraverse2(T);//利用非递归算法的先序遍历，输出结点值<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 4:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> get_node(T); //利用递归算法得到的各个结点的个数<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 5:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> get_node_1(T);&nbsp;<wbr> //利用非递归算法得到的各个结点的个数<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 6:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> LevelOrder(T);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 7:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("二叉树的高度为%d\n",height(T));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 8:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(judge(T)==0)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("No\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("Yes\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 9:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> exchange(T);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 10:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> InorderTraverse(T);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }while(choice!=11);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>}<br>
<img src ="http://www.cppblog.com/deercoder/aggbug/102109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:36 <a href="http://www.cppblog.com/deercoder/articles/102109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>线性表的链式存储结构</title><link>http://www.cppblog.com/deercoder/articles/102107.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:35:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102107.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102107.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102107.html</trackback:ping><description><![CDATA[<p style="MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">设某线性表数据元素的类型为整型，以链表结构存储线性表。试编程实现：</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(1)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">输入数据元素，以先进先出形式创建单链表</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(2)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">销毁单链表</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(3)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">线性表置空</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(4)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">求线性表长度</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(5)</span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">在第<span lang=EN-US XML:LANG="EN-US">i</span>个数据元素前插入新的元素</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(6)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">删除第<span lang=EN-US XML:LANG="EN-US">i</span>个元素</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(7)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">显示线性表中的全部元素</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(8)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">求最大元素的值和平均值</span></p>
<p><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US">&nbsp;<wbr></span></p>
<br>#include&lt;stdio.h&gt;<br>#include&lt;conio.h&gt;<br>#include&lt;malloc.h&gt;<br>#include&lt;stdlib.h&gt;<br>#define ERROR&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 0<br>#define OK&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1<br>#define OVERFLOW&nbsp;<wbr> -2<br>typedef struct LNode{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>struct LNode *next;<br>}LNode,*LinkList;<br><br>int Create_List(LinkList L,int length)<br>{//创建一个带表头结点的大小为n个的单链表<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LinkList p, tail; //声明一定要在前面，否则会出错<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> tail=L;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=0;i&lt;length;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p=(LinkList)malloc(sizeof(LNode));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("请输入%d个数据\n",length);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>scanf("%d",&amp;p-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p-&gt;next=NULL;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> tail-&gt;next=p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>tail=tail-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br><br>int display_all(LinkList L,int length) //依赖于长度，可是却不定，长度函数有问题。<br>{//显示所有的数据元素<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("线性表的全部数据元素如下：\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=0;i&lt;length-1;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d ",L-&gt;next-&gt;data);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>L=L-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br><br>int length_L(LinkList L) //有问题<br>{//求得线性表的长度<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int length=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LinkList p=L;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>++length;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return length;<br>}<br><br>int ListInsert(LinkList L,int i ,int *e)<br>{//插入元素<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LinkList p=L,s;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int j=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p&amp;&amp;j&lt;i-1)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>++j;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(!p||j&gt;i-1) return ERROR;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> s=(LinkList)malloc(sizeof(LNode));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> s-&gt;data=*e;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> s-&gt;next=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> p-&gt;next=s;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> return OK;<br>}<br>int ListDelet(LinkList L, int i)<br>{//删除指定位置的结点<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LinkList p=L,q;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int j=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p-&gt;next&amp;&amp;j&lt;i-1)&nbsp;<wbr> //寻找第i-1个结点<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>++j;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(!(p-&gt;next)||j&gt;i-1) return ERROR;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> q=p-&gt;next; p-&gt;next=q-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> free(q);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br>int Destroy_L(LinkList L)&nbsp;<wbr>&nbsp;<wbr> //这里会遇到一个问题，如果将头结点free掉的话就会出错，<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //因为头结点不是自己分配的，而是系统分配的，在主函数中，所以无法释放<br>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> LinkList head=L,p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p=head;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if (head)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p = head-&gt;next ;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> head = head-&gt;next ;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> while(head!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> p=head;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> head=head-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> free(p);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> return OK;<br>}<br>int ClearList(LinkList L)<br>{//线性表置空<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>L-&gt;next=NULL;&nbsp;<wbr> //将头结点指针域置为NULL<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br>int max_num(LinkList L)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LinkList p=L-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int max=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(max&lt;=p-&gt;data)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>max=p-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return max;<br>}<br><br>float aver_num(LinkList L)&nbsp;<wbr> //注意函数名不要和变量同名，很容易出错<br>{ //求出所有元素的平均值<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> LinkList p=L-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>float average;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int sum=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int length=length_L(L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(p!=NULL)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>sum+=p-&gt;data;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>p=p-&gt;next;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>average=(float)sum/(length-1);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return average;<br>}<br><br>void main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i,get,length,e;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>LNode L;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //创建头结点L<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>L.next=NULL;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>do{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("1.输入数据元素，以先进先出形式创建单链表\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("2.销毁单链表\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("3.线性表置空\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("4.求线性表长度\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("5.在第i个数据元素前插入新的元素\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("6. 删除第i个元素\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("7.显示线性表中的全部元素\n");<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("8.求最大元素的值和平均值\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("9.退出\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("请输入你选择的操作序号\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> switch(get){<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 1:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("请输入数据元素的个数\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;length);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Create_List(&amp;L,length);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> case 2:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Destroy_L(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 3:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ClearList(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 4:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> length=length_L(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("这个线性链表的长度(含头结点)为%d\n",length);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 5:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("请分别输入你要插入数据的元素的位置(第i个元素之前)和值(整型)\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> scanf("%d,%d",&amp;i,&amp;e);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ListInsert(&amp;L,i,&amp;e);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 6:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> printf("请分别输入你要删除数据的元素的位置(第i个元素)\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> scanf("%d",&amp;i);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ListDelet(&amp;L,i);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 7:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> length=length_L(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> display_all(&amp;L,length);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 8:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("线性表中的最大元素是%d\n",max_num(&amp;L));<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("线性表中所有元素的平均值%f\n",aver_num(&amp;L));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> case 9:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}while(get!=9);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>}<br>
<img src ="http://www.cppblog.com/deercoder/aggbug/102107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:35 <a href="http://www.cppblog.com/deercoder/articles/102107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顺序表的操作</title><link>http://www.cppblog.com/deercoder/articles/102108.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:35:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102108.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102108.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102108.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>1．</span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">设某线性表数据元素的类型为整型，以顺序结构存储线性表。试编程实现：</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(1)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">线性表置空</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(2)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">求线性表长度</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(3)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">数据元素的插入操作</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(4)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">数据元素的删除操作</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(5)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">显示线性表中的全部元素</span></p>
<br>#include&lt;stdio.h&gt;<br>#include&lt;malloc.h&gt;<br>#include &lt;conio.h&gt;<br>#include &lt;stdlib.h&gt;<br>#define LIST_INIT_SIZE 10<br>#define LISTINCREMENT 10<br>#define ERROR&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 0<br>#define OK&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1<br>#define OVERFLOW&nbsp;<wbr> -2<br><br>typedef struct{<br>&nbsp;<wbr>&nbsp;<wbr> int *elem;<br>&nbsp;<wbr>&nbsp;<wbr> int length;<br>&nbsp;<wbr>&nbsp;<wbr> int listsize;<br>&nbsp;<wbr>&nbsp;<wbr> }SqList;<br><br>int InitList_Sq(SqList *L) //括号中传递参数是是它的指针L,这样才能对它指向的元素改变。<br>{<br>&nbsp;<wbr> int i;<br>&nbsp;<wbr> L-&gt;elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));<br>&nbsp;<wbr> if(!L-&gt;elem)&nbsp;<wbr> exit(OVERFLOW);<br>&nbsp;<wbr> L-&gt;length =10;<br>&nbsp;<wbr> L-&gt;listsize = LIST_INIT_SIZE; //分配初始的空间<br>&nbsp;<wbr> for(i=0;i&lt;L-&gt;length;i++)<br>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> L-&gt;elem[i]=i;<br>&nbsp;<wbr> }<br>&nbsp;<wbr> return OK;<br>}//InitList_Sq<br><br>int get_length(SqList *L)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return L-&gt;length;<br>}<br><br>int destroy(SqList *L)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>L-&gt;length=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br><br>int ListInsert_Sq(SqList *L,int i, int e)<br>{ //在顺序表L中的第i个位置之前插入新的元素e；<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>//i的合法值为1&lt;=i&lt;=ListLength_Sq(L)+1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int *newbase,*q,*p;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(i&lt;1||i&gt;L-&gt;length+1) return ERROR;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(L-&gt;length&gt;=L-&gt;listsize){// 当前的存储空间已满，增加分配<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> newbase = ( int *)realloc(L-&gt;elem,( L-&gt;listsize +LISTINCREMENT)*sizeof(int));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> if(!newbase) exit(OVERFLOW) ; //存储空间分配失败<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> L-&gt;elem = newbase;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> L-&gt;listsize+=LISTINCREMENT;&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> q=&amp;(L-&gt;elem[i-1]);<br>&nbsp;<wbr>&nbsp;<wbr> for(p=&amp;(L-&gt;elem[L-&gt;length-1]);p&gt;=q;--p)&nbsp;<wbr> *(p+1)=*p;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //插入位置及之后的元素右移&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> *q=e;<br>&nbsp;<wbr>&nbsp;<wbr> ++L-&gt;length;<br>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}//ListInsert_Sq;<br><br>int ListDelete_Sq(SqList *L, int i, int e) { &nbsp;<wbr><br>&nbsp;<wbr> // 在顺序线性表L中删除第i个元素，并用e返回其值。<br>&nbsp;<wbr> // i的合法值为1&#8804;i&#8804;ListLength_Sq(L)。<br>&nbsp;<wbr> int *p, *q;<br>&nbsp;<wbr> if (i&lt;1 || i&gt;L-&gt;length) return ERROR;&nbsp;<wbr> // i值不合法<br>&nbsp;<wbr> p = &amp;(L-&gt;elem[i-1]);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // p为被删除元素的位置<br>&nbsp;<wbr> e = *p;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 被删除元素的值赋给e<br>&nbsp;<wbr> q = L-&gt;elem+L-&gt;length-1;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 表尾元素的位置<br>&nbsp;<wbr> for (++p; p&lt;=q; ++p) *(p-1) = *p;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 被删除元素之后的元素左移<br>&nbsp;<wbr> --L-&gt;length;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> // 表长减1<br>&nbsp;<wbr> return OK;<br>} // ListDelete_Sq<br><br>int display_all(SqList *L)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=0;i&lt;L-&gt;length;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d",L-&gt;elem[i]);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf(" ");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return OK;<br>}<br>int main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>SqList L;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int get,e=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i,num;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> InitList_Sq(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>do{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("请输入你要进行的操作序号\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("1.线性表置空\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("2.求线性表长度\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("3.数据元素的插入操作\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("4.数据元素的删除操作\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("5.显示线性表中的全部元素\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("6.退出\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>scanf("%d",&amp;get);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>switch(get)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 1:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> destroy(&amp;L);//将顺序表置空，只需要将其长度置零<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 2:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("该线性表的长度是%d\n",get_length(&amp;L)); //求取线性表的长度<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 3:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> //在指定的位置上插入指定的数据元素<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("请输入你要插入的元素的位置（即在第i个元素之前插入）以及插入元素\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> scanf("%d,%d",&amp;i,&amp;num);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> ListInsert_Sq(&amp;L,i,num);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("新的线性表是\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> display_all(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 4:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>//删除指定位置的数据元素<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("请输入你要删除的元素的位置（即删除第i个元素）\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> scanf("%d",&amp;i);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ListDelete_Sq(&amp;L,i,e);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("新的线性表是\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> display_all(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 5:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>//显示线性表的所有元素<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> display_all(&amp;L);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>case 6:<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>//退出程序<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> break;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}while(get!=6);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> return OK;<br>}<br>
<img src ="http://www.cppblog.com/deercoder/aggbug/102108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:35 <a href="http://www.cppblog.com/deercoder/articles/102108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入排序的思想</title><link>http://www.cppblog.com/deercoder/articles/102106.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102106.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102106.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102106.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102106.html</trackback:ping><description><![CDATA[插入排序的思想：<br>1. 现在有两种方法，一种是算法导论中的，一种是数据结构的，但是总体思想都是一致的。<br>2.对于每一个i（从1开始，即第二个元素，具体是多少不确定），如果a[i]比a[i-1]小，就是比前面的那个小，则进行相应的操作，否则不变，递增下去。<br>3.每次都将a[i]赋值给key，关键字key，实际上每次都进行比较，先赋值给key，实际上就是保留这个数，然后将前面的一个数移动到后面，这个是首先的操作。<br>4.下面是对于具体的每一个key来定位，每次都要移动，&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br>注意最后要赋值下去。<br><br><br>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;精秒之处在于赋值和保存a[i]<br>
<img src ="http://www.cppblog.com/deercoder/aggbug/102106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:30 <a href="http://www.cppblog.com/deercoder/articles/102106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入排序</title><link>http://www.cppblog.com/deercoder/articles/102105.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:29:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102105.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102105.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102105.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102105.html</trackback:ping><description><![CDATA[#include&lt;stdio.h&gt;<br><br>int Insert_sort(int *p,int length)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i,j,key;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> for(i=1;i&lt;=(length-1);i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(*(p+i)&lt;*(p+i-1))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> key=*(p+i);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> *(p+i)=*(p+i-1);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> for(j=i-1;j&gt;=0 &amp;&amp;key&lt;*(p+j);--j)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> *(p+j)=*(p+j-1);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> *(p+j+1)=key;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br><br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 0;<br>}<br><br>int main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int a[10]={0,4,1,9,5,7,2,3,6,8};<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int *p=&amp;a[0];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>Insert_sort(p,10);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=0;i&lt;10;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d ",a[i]);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>}<br><br><br>通过指针调用的形式来改变原来数组中的值，这样就可以了。而每一个数组元素都可以用指针加位移量来确定 <br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_30_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_512_Open_Text.style.display='none'; Codehighlighter1_30_512_Closed_Image.style.display='inline'; Codehighlighter1_30_512_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_30_512_Closed_Image onclick="this.style.display='none'; Codehighlighter1_30_512_Closed_Text.style.display='none'; Codehighlighter1_30_512_Open_Image.style.display='inline'; Codehighlighter1_30_512_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_30_512_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_30_512_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">a[0]为哨兵，所以它的值随便，但是注意要排序的是后面的几个，而且长度也是后面的几个。</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_109_131_Open_Image onclick="this.style.display='none'; Codehighlighter1_109_131_Open_Text.style.display='none'; Codehighlighter1_109_131_Closed_Image.style.display='inline'; Codehighlighter1_109_131_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_109_131_Closed_Image onclick="this.style.display='none'; Codehighlighter1_109_131_Closed_Text.style.display='none'; Codehighlighter1_109_131_Open_Image.style.display='inline'; Codehighlighter1_109_131_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_109_131_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_109_131_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">插入排序</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_172_413_Open_Image onclick="this.style.display='none'; Codehighlighter1_172_413_Open_Text.style.display='none'; Codehighlighter1_172_413_Closed_Image.style.display='inline'; Codehighlighter1_172_413_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_172_413_Closed_Image onclick="this.style.display='none'; Codehighlighter1_172_413_Closed_Text.style.display='none'; Codehighlighter1_172_413_Open_Image.style.display='inline'; Codehighlighter1_172_413_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_172_413_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_172_413_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br><img id=Codehighlighter1_204_406_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_406_Open_Text.style.display='none'; Codehighlighter1_204_406_Closed_Image.style.display='inline'; Codehighlighter1_204_406_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_204_406_Closed_Image onclick="this.style.display='none'; Codehighlighter1_204_406_Closed_Text.style.display='none'; Codehighlighter1_204_406_Open_Image.style.display='inline'; Codehighlighter1_204_406_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_204_406_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_204_406_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">已经保存了a[i],所以下面就不必担心被冲掉。</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[j];</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">j)<br><img id=Codehighlighter1_332_373_Open_Image onclick="this.style.display='none'; Codehighlighter1_332_373_Open_Text.style.display='none'; Codehighlighter1_332_373_Closed_Image.style.display='inline'; Codehighlighter1_332_373_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_332_373_Closed_Image onclick="this.style.display='none'; Codehighlighter1_332_373_Closed_Text.style.display='none'; Codehighlighter1_332_373_Open_Image.style.display='inline'; Codehighlighter1_332_373_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_332_373_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_332_373_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[j];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从a[1]开始输出，这样才消除了哨兵。</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_476_510_Open_Image onclick="this.style.display='none'; Codehighlighter1_476_510_Open_Text.style.display='none'; Codehighlighter1_476_510_Closed_Image.style.display='inline'; Codehighlighter1_476_510_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_476_510_Closed_Image onclick="this.style.display='none'; Codehighlighter1_476_510_Closed_Text.style.display='none'; Codehighlighter1_476_510_Open_Image.style.display='inline'; Codehighlighter1_476_510_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_476_510_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_476_510_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,a[i]);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">注意真正的排序部分是从a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]开始的，还有长度length不是数组的长度，而是实际要排序的长度，这里把a[i]冲掉的步骤很好，而且没有影响，因为已经保存下来了。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--------------------</span><span style="COLOR: #000000">《数据结构&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;严蔚敏版》<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_30_417_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_417_Open_Text.style.display='none'; Codehighlighter1_30_417_Closed_Image.style.display='inline'; Codehighlighter1_30_417_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_30_417_Closed_Image onclick="this.style.display='none'; Codehighlighter1_30_417_Closed_Text.style.display='none'; Codehighlighter1_30_417_Open_Image.style.display='inline'; Codehighlighter1_30_417_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_30_417_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_30_417_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_46_66_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_66_Open_Text.style.display='none'; Codehighlighter1_46_66_Closed_Image.style.display='inline'; Codehighlighter1_46_66_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_46_66_Closed_Image onclick="this.style.display='none'; Codehighlighter1_46_66_Closed_Text.style.display='none'; Codehighlighter1_46_66_Open_Image.style.display='inline'; Codehighlighter1_46_66_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_46_66_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_46_66_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;key,i,j;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_112_333_Open_Image onclick="this.style.display='none'; Codehighlighter1_112_333_Open_Text.style.display='none'; Codehighlighter1_112_333_Closed_Image.style.display='inline'; Codehighlighter1_112_333_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_112_333_Closed_Image onclick="this.style.display='none'; Codehighlighter1_112_333_Closed_Text.style.display='none'; Codehighlighter1_112_333_Open_Image.style.display='inline'; Codehighlighter1_112_333_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_112_333_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_112_333_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_146_327_Open_Image onclick="this.style.display='none'; Codehighlighter1_146_327_Open_Text.style.display='none'; Codehighlighter1_146_327_Closed_Image.style.display='inline'; Codehighlighter1_146_327_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_146_327_Closed_Image onclick="this.style.display='none'; Codehighlighter1_146_327_Closed_Text.style.display='none'; Codehighlighter1_146_327_Open_Image.style.display='inline'; Codehighlighter1_146_327_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_146_327_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_146_327_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;key</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[j];</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">j)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_251_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_294_Open_Text.style.display='none'; Codehighlighter1_251_294_Closed_Image.style.display='inline'; Codehighlighter1_251_294_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_251_294_Closed_Image onclick="this.style.display='none'; Codehighlighter1_251_294_Closed_Text.style.display='none'; Codehighlighter1_251_294_Open_Image.style.display='inline'; Codehighlighter1_251_294_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_251_294_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_251_294_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">key;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_371_415_Open_Image onclick="this.style.display='none'; Codehighlighter1_371_415_Open_Text.style.display='none'; Codehighlighter1_371_415_Closed_Image.style.display='inline'; Codehighlighter1_371_415_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_371_415_Closed_Image onclick="this.style.display='none'; Codehighlighter1_371_415_Closed_Text.style.display='none'; Codehighlighter1_371_415_Open_Image.style.display='inline'; Codehighlighter1_371_415_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_371_415_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_371_415_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,a[i]);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/deercoder/aggbug/102105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:29 <a href="http://www.cppblog.com/deercoder/articles/102105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据结构-----简单的插入</title><link>http://www.cppblog.com/deercoder/articles/102104.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:28:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102104.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102104.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102104.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102104.html</trackback:ping><description><![CDATA[//下面的函数用来实现线性表的插入<br>//两个表无序也可，只是插入就可以。<br>#include&lt;stdio.h&gt;<br>int compare(int e,int *a,int length)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> for(i=0;i&lt;length;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(e==*(a+i))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 1;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>continue;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return 0;<br>}<br>int main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int i,j;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int length_a=10; //定义a的实际长度，剩余空间用来填充。<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int a[20]={0,1,2,3,4,5,6,7,8,9};<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int b[10]={2,4,11,23,34,21,12,8,9,10};<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=0,j=0;i&lt;10;i++)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(!compare(b[i],a,10))<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>a[10+j]=b[i];<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>j++;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> else<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> continue;<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> for(i=0;i&lt;j+length_a;i++)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("%d ",a[i]);<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> printf("\n");<br>&nbsp;<wbr>&nbsp;<wbr> return 0;<br>}<br>
<img src ="http://www.cppblog.com/deercoder/aggbug/102104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:28 <a href="http://www.cppblog.com/deercoder/articles/102104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现一个简单的进制转换</title><link>http://www.cppblog.com/deercoder/articles/102103.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/102103.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/102103.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/102103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/102103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/102103.html</trackback:ping><description><![CDATA[<span style="FONT-WEIGHT: bold">//只是利用了堆栈的性质，实际上根本不是<br>//利用堆栈的性质实现将一个十进制转换成相应的进制表示。<br>#include&lt;stdio.h&gt;<br>int convert(int a,int N,int *num)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int count=0;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>while(a!=0)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>*(num+count)=a%N;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>a=a/N;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>count++;&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>return count;<br>}<br>int main()<br>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int num[10],i,N;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int a,count,get;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>int *p=&amp;count;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("请输入你要转换的十进制数\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>scanf("%d",&amp;a);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("请输入你要选择的进制\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("1.二进制\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("2.八进制\n");<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>scanf("%d",&amp;N);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>get=a;<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>if(N==1)<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> count=convert(a,2,num);&nbsp;<wbr>&nbsp;<wbr> //输入的N和你要转换的进制不是同一个。<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(N==2)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> count=convert(a,8,num);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d的%d进制表示是\n",get,N);<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>for(i=count-1 ; i&gt;=0 ; i--)&nbsp;<wbr> //开始的时候傻&#215;，用的是i&lt;0,肯定都不满足啊，所以完全没有输出。<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("%d",*(num+i));<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>}<br>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>printf("\n");<br>}<br><br>注意16进制就不可用，原因是超过10的数就要用字母表示，会出错的。<br></span>
<img src ="http://www.cppblog.com/deercoder/aggbug/102103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:27 <a href="http://www.cppblog.com/deercoder/articles/102103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二叉排序树的各种操作实现</title><link>http://www.cppblog.com/deercoder/articles/100965.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sun, 15 Nov 2009 03:54:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/100965.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/100965.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/100965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/100965.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/100965.html</trackback:ping><description><![CDATA[<p>#include &lt;iostream&gt;<br>#include &lt;iomanip&gt;<br>using namespace std;</p>
<p>typedef struct BinaryTree<br>{<br>&nbsp;int data;<br>&nbsp;struct BinaryTree *l;<br>&nbsp;struct BinaryTree *r;<br>}*BiTree,BiNode;<br>&nbsp;<br>class BiSearchT<br>{<br>private:<br>&nbsp;BiTree root;<br>public:<br>&nbsp;BiSearchT() :root(NULL) {}<br>&nbsp;int PreOrderTraverse(BiTree t,int (*Visit)(int e));<br>&nbsp;int InOrderTraverse(BiTree t,int (*Visit)(int e));<br>&nbsp;int InsertBST(BiTree *t,int e);<br>&nbsp;void Delete(BiTree *p);<br>&nbsp;bool DeleteBST(BiTree *t,int key);<br>&nbsp;bool SearchBST(BiTree t,int key,BiTree f,BiTree *p);<br>};<br>//先序遍历二叉树T<br>int BiSearchT::PreOrderTraverse(BiTree t,int (*Visit)(int d))<br>{<br>&nbsp;if(t)<br>&nbsp;{<br>&nbsp;&nbsp;if(Visit(t-&gt;data))<br>&nbsp;&nbsp;&nbsp;if(PreOrderTraverse(t-&gt;l,Visit))<br>&nbsp;&nbsp;&nbsp;&nbsp;if(PreOrderTraverse(t-&gt;r,Visit)) return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}else return 1;<br>}<br>//中序遍历二叉树T<br>int BiSearchT::InOrderTraverse(BiTree t,int (*Visit)(int d))<br>{<br>&nbsp;if(t)<br>&nbsp;{<br>&nbsp;&nbsp;if(InOrderTraverse(t-&gt;l,Visit))<br>&nbsp;&nbsp;&nbsp;if(Visit(t-&gt;data))<br>&nbsp;&nbsp;&nbsp;&nbsp;if(InOrderTraverse(t-&gt;r,Visit)) return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}else return 1;<br>}<br>//二叉排序树上的查找递归算法<br>bool BiSearchT::SearchBST(BiTree t,int key,BiTree f,BiTree *p)<br>{<br>&nbsp;if(!t)<br>&nbsp;&nbsp;{*p=f;return false;}<br>&nbsp;&nbsp;else if(key==t-&gt;data) {*p=t;return true;}<br>&nbsp;&nbsp;else if(key&lt;t-&gt;data) SearchBST(t-&gt;l,key,t,p);<br>&nbsp;&nbsp;else SearchBST(t-&gt;r,key,t,p);<br>}<br>//插入算法<br>int BiSearchT::InsertBST(BiTree *t,int e)<br>{<br>&nbsp;BiTree p;<br>&nbsp;BiTree s;<br>&nbsp;if(!SearchBST(*t,e,NULL,&amp;p))<br>&nbsp;{<br>&nbsp;&nbsp;s=(BiTree)malloc(sizeof(BiNode));<br>&nbsp;&nbsp;s-&gt;data=e;s-&gt;l=s-&gt;r=NULL;<br>&nbsp;&nbsp;if(!p) *t=s;<br>&nbsp;&nbsp;else if(e&lt;p-&gt;data) p-&gt;l=s;<br>&nbsp;&nbsp;else p-&gt;r=s;<br>&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;else return false;<br>}<br>//在二叉树中删除一个结点<br>void BiSearchT::Delete(BiTree *p)<br>{<br>&nbsp;BiTree q,s;<br>&nbsp;if(!(*p)-&gt;r)<br>&nbsp;{<br>&nbsp;&nbsp;q=(*p);<br>&nbsp;&nbsp;(*p)=(*p)-&gt;l;<br>&nbsp;&nbsp;free(q);<br>&nbsp;}<br>&nbsp;else if(!(*p)-&gt;l)<br>&nbsp;{<br>&nbsp;&nbsp;q=(*p);<br>&nbsp;&nbsp;(*p)=(*p)-&gt;r;<br>&nbsp;&nbsp;free(q);<br>&nbsp;}<br>&nbsp;else <br>&nbsp;{<br>&nbsp;&nbsp;q=s=(*p)-&gt;l;<br>&nbsp;&nbsp;while(s-&gt;r) s=s-&gt;r;<br>&nbsp;&nbsp;s-&gt;r=(*p)-&gt;r;<br>&nbsp;&nbsp;free(*p);<br>&nbsp;&nbsp;(*p)=q;<br>&nbsp;}<br>}<br>//二叉排序树的删除<br>bool BiSearchT::DeleteBST(BiTree *t,int key)<br>{<br>&nbsp;if(*t!=NULL)<br>&nbsp;{<br>&nbsp;&nbsp;if(key==(*t)-&gt;data) Delete(t);<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;if(key&lt;(*t)-&gt;data) DeleteBST(&amp;((*t)-&gt;l),key);<br>&nbsp;&nbsp;&nbsp;else DeleteBST(&amp;((*t)-&gt;r),key);<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;else return false;<br>}<br>//输出二叉排序树的数据地域值<br>int printelem(int d)<br>{<br>&nbsp;cout&lt;&lt;setw(4)&lt;&lt;d;<br>&nbsp;return 1;<br>}</p>
<p>void main()<br>{<br>&nbsp;BiTree sroot=NULL;<br>&nbsp;BiTree Croot=NULL;<br>&nbsp;int q,c,d,e,f,g,h,l,m,x;<br>&nbsp;cout&lt;&lt;"..............................二叉排序树的基本操作.............................."&lt;&lt;endl;<br>&nbsp;cout&lt;&lt;"请您输入十个正整数作为二叉排序树的十个结点:"&lt;&lt;endl;<br>&nbsp;cin&gt;&gt;q&gt;&gt;c&gt;&gt;d&gt;&gt;e&gt;&gt;f&gt;&gt;g&gt;&gt;h&gt;&gt;l&gt;&gt;m&gt;&gt;x;<br>&nbsp;int i,j,k,a[10]={q,c,d,e,f,g,h,l,m,x};<br>&nbsp;int n=7,b[]={10,7,6,9,20,12,22};<br>&nbsp;BiSearchT my;<br>&nbsp;for(i=0;i&lt;10;i++)<br>&nbsp;&nbsp;my.InsertBST(&amp;sroot,a[i]);<br>&nbsp;cout&lt;&lt;"二叉排序树创建成功!"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"先序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;my.PreOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>&nbsp;cout&lt;&lt;"中序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;my.InOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"请输入你要查找的元素:";<br>&nbsp;cin&gt;&gt;i;<br>&nbsp;if(i==q||i==c||i==d||i==e||i==f||i==g||i==h||i==l||i==m||i==x)<br>&nbsp;&nbsp;cout&lt;&lt;"查找成功!"&lt;&lt;endl;<br>&nbsp;else cout&lt;&lt;"查找失败!"&lt;&lt;endl;<br>&nbsp;cout&lt;&lt;"请输入你要删除的元素(...输入的元素必须在二叉排序树中...):";<br>&nbsp;cin&gt;&gt;j;<br>&nbsp;my.DeleteBST(&amp;sroot,j);<br>&nbsp;cout&lt;&lt;"先序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;my.PreOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>&nbsp;cout&lt;&lt;"中序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; my.InOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"在此基础上请输入你要插入的元素:";<br>&nbsp;cin&gt;&gt;k;<br>&nbsp;my.InsertBST(&amp;sroot,k);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"先序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;my.PreOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>&nbsp;cout&lt;&lt;"中序遍历二叉排序树:"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; my.InOrderTraverse(sroot,printelem);<br>&nbsp;cout&lt;&lt;endl;<br>}<br></p>
<img src ="http://www.cppblog.com/deercoder/aggbug/100965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-15 11:54 <a href="http://www.cppblog.com/deercoder/articles/100965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>