这篇文章是关于严蔚敏清华版《数据结构》教材的代码,包括书上大纲规定的线性表,链表,栈,队列,二叉树,图,排序,
查找等基本算法的编码,还包括循环链表,广义表,两栈共享空间,字符串模式匹配等非常规,较难数据结构的编码,除此
之外书本后面大量的思考题,例如约瑟夫环,括号匹配,迷宫问题,八皇后,火车厢重排,斐波那契查找等一些列经典问题
也有代码。文章中的代码,均已调试通过,并附有程序运行结果,读者可以自行复制运行。
这是我用一个假期重学数据结构的劳动结果,希望此篇文章,能给初学数据局结构的同学以帮助,代码若有什么问题,可以
直接用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 }