这篇文章是关于严蔚敏清华版《数据结构》教材的代码,包括书上大纲规定的线性表,链表,栈,队列,二叉树,图,排序,

查找等基本算法的编码,还包括循环链表,广义表,两栈共享空间,字符串模式匹配等非常规,较难数据结构的编码,除此

之外书本后面大量的思考题,例如约瑟夫环,括号匹配,迷宫问题,八皇后,火车厢重排,斐波那契查找等一些列经典问题

也有代码。文章中的代码,均已调试通过,并附有程序运行结果,读者可以自行复制运行。

  这是我用一个假期重学数据结构的劳动结果,希望此篇文章,能给初学数据局结构的同学以帮助,代码若有什么问题,可以

直接用QQ与我联系,感谢赐教。

  由于整个篇幅较长,相关内容按照数据结构课本章节内容组织。下面是第四章,其他章节请参照其他博客。

             

                  第四章 树与二叉树

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 const int MaxSize=100;
  6 
  7 struct BiNode
  8 
  9 {
 10 
 11 char data;
 12 
 13 BiNode *lchild,*rchild;
 14 
 15 };
 16 
 17 class BiTree
 18 
 19 {
 20 
 21 public:
 22 
 23 BiTree();
 24 
 25 ~BiTree();
 26 
 27 void PreOrder(BiNode *Root);
 28 
 29 void PostOrder(BiNode *Root);
 30 
 31 void InOrder(BiNode *root);
 32 
 33 void InsertL(char Data,BiNode *Parent);
 34 
 35 void InsertR(char Data,BiNode *Parent);
 36 
 37 void DeleteL(BiNode *Parent);
 38 
 39 void DeleteR(BiNode *Parent);
 40 
 41 BiNode * Search(char Data);
 42 
 43 private:
 44 
 45 BiNode * Creat();
 46 
 47 void Release(BiNode *root);
 48 
 49 BiNode *root;
 50 
 51 };
 52 
 53 BiTree::BiTree()
 54 
 55 {
 56 
 57 root=Creat();
 58 
 59 }
 60 
 61 BiNode * BiTree::Creat()
 62 
 63 {
 64 
 65 char ch;
 66 
 67 cout<<"输入节点数据:";
 68 
 69 cin>>ch;
 70 
 71 if(ch=='#')root=NULL;
 72 
 73 else
 74 
 75 {
 76 
 77 root=new BiNode;
 78 
 79 root->data=ch;
 80 
 81 root->lchild=Creat();
 82 
 83 root->rchild=Creat();
 84 
 85 }
 86 
 87 return root;
 88 
 89 }
 90 
 91 void BiTree::Release (BiNode *root)
 92 
 93 {
 94 
 95 if(root!=NULL)
 96 
 97 {
 98 
 99 Release(root->lchild );
100 
101 Release(root->rchild );
102 
103 delete root;
104 
105 }
106 
107 }
108 
109 BiTree::~BiTree ()
110 
111 {
112 
113 Release(root);
114 
115 }
116 
117 void BiTree::PreOrder (BiNode *Root)
118 
119 {
120 
121 cout<<"*********前序遍历*********" <<endl;
122 
123 int top=-1;
124 
125 BiNode *s[MaxSize];
126 
127 while(Root!=NULL || top!=-1)
128 
129 {
130 
131 while(Root!=NULL)
132 
133 {
134 
135 cout<<Root->data <<" ";
136 
137 top++;
138 
139 s[top]=Root;
140 
141 Root=Root->lchild ;
142 
143 }
144 
145 if(top!=-1)
146 
147 {
148 
149 Root=s[top];
150 
151 top--;
152 
153 Root=Root->rchild ;
154 
155 }
156 
157 }
158 
159 }
160 
161 /*void BiTree::PreOrder (BiNode *root)
162 
163 {
164 
165 if(root==NULL)
166 
167 return ;
168 
169 else
170 
171 {
172 
173 cout<<root->data<<" ";
174 
175 PreOrder(root->lchild );
176 
177 PreOrder(root->rchild );
178 
179 }
180 
181 }*/
182 
183 void BiTree::PostOrder (BiNode *root)
184 
185 {
186 
187 if(root==NULL)
188 
189 return ;
190 
191 else
192 
193 {
194 
195 PostOrder(root->lchild );
196 
197 PostOrder(root->rchild );
198 
199 cout<<root->data <<" ";
200 
201 }
202 
203 }
204 
205 void BiTree::InOrder (BiNode *root)
206 
207 {
208 
209 if(root==NULL)
210 
211 return ;
212 
213 else
214 
215 {
216 
217 InOrder(root->lchild);
218 
219 cout<<root->data<<" ";
220 
221 InOrder(root->rchild);
222 
223 }
224 
225 }
226 
227 void main()
228 
229 {
230 
231      BiTree t1;
232 
233 }

 

 posted on 2012-10-02 13:46  莽原_狼  阅读(183)  评论(0编辑  收藏  举报