通讯录管理、八皇后问题、约瑟夫环、表达式求值_课程设计报告(编辑修改稿)内容摘要:

L。 } } //排序函数 void Sort(Linklist L) { Linklist p。 p=L。 int i。 printf(请选择通讯录的几种排序方式: \n)。 printf(1:按姓名排序。 2:按电话号码排序。 3:按地址排序。 其他整数 :退出 \n)。 scanf(%d,amp。 i)。 switch(i) { case 1:SortName(p)。 break。 11 case 2:SortTel(p)。 break。 case 3:SortAddress(p)。 break。 default:break。 } } //主函数 void main() { int i,j,t。 Linklist L。 while(1){ printf(通讯录功能如下: \n1.通讯录链表的建立; \n2.通讯者结点的插入; \n3.通讯者结点的查询; \n4.通讯者结点的删除; \n5.通讯录链表的输出; \n0.退出管理系统 :\n请选择 05\n)。 scanf(%d,amp。 t)。 if((t=0)||(t5)) break。 switch(t){ case 1:{L=CreatList()。 Sort(L)。 break。 } case 2:{ printf(在第 i个联系人前插入,请输入 i值 \n)。 scanf(%d,amp。 i)。 ListInsert(L,i)。 break。 } case 3:ListFind(L)。 break。 case 4:{ printf(删除第 j 个联系人的信息,请输入 j 值 \n)。 scanf(%d,amp。 j)。 ListDelete(L,j)。 break。 } case 5:OutPut(L)。 break。 } } printf(开始回收内存。 )。 Release(L)。 printf(回收内存结束。 )。 } 12 2 八皇后问题 问题简介 利用栈结构实现八皇后问题。 八皇后问题 19 世纪著名的数学家高斯于 1850年提出的。 他的问题是:在 8*8的棋盘上放置 8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。 请设计算法打印所有可能的摆放方法。 提示: 可以使用递归或非递归两种方法实现 实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上 存储结构 存储结构:栈(递归) 关键算法分析 【设计思想】 由于八皇后问题,可以分解成算法相同的子问题,所以使用递归的方法 【伪代码】 输入皇后个数 n k=1 判断 k是否大于 n 是:打印一组可能 13 否:循环行位置 1~n 判断该位置是否符合要求,若符合记录 q[k]的坐标 y 值 k+1 重复 3 源代码 include iostream using namespace std。 const int StackSize=8。 //定义栈的最大高度 int ans=0。 //初始化摆放方案计数器 template class T class SeqStack //定义顺序栈模板类 { public: SeqStack(){top=1。 } //构造函数,初始化空栈 void Push(T x)。 //入栈 void Pop()。 //出栈 void PlaceQueen(int row)。 //摆放 8 皇后的递归函数 bool Judgement()。 //判断是否在同一行同一列同一斜线 void Output()。 //打印棋盘 bool Empty(){if(top==1) return true。 else return false。 }。 //判别栈是否为空 private: T data[StackSize]。 //定义数组 int top。 //栈顶指针 }。 template class T 14 void SeqStackT::Push(T x) //入栈操作 { if(top=StackSize1) throw error。 top++。 //栈顶指针上移 data[top]=x。 } template class T void SeqStackT::Pop() //出栈操作 { if(Empty()) throw error。 top。 //栈顶指针下移 } template class T void SeqStackT::PlaceQueen(int row) //在栈顶放置符合条件的值的操作 ,即摆放皇后 { for (int col=0。 colStackSize。 col++) //穷尽 0~7,即穷尽列 { Push(col)。 if (Judgement()) //判断摆放皇后的位置是否安全 { if (rowStackSize1) //若还没有放到第八个皇后,则进行下一个皇后的放置 PlaceQueen(row+1)。 else { ans++。 //解数加 1 Output()。 //打印成功的棋盘 } 15 } Pop()。 //若不符合条件则出栈 } } template class T bool SeqStackT::Judgement() { for(int i=0。 itop。 i++) //依次检查前面各行的皇后位置 if(data[top]==data[i]||(abs(data[top]data[i]))==(topi)) //判断是否在同一列同一斜线 return false。 return true。 } template class T void SeqStackT::Output() //将栈的数组形式打印成棋盘形式 { coutNO.ans:endl。 for(int i=0。 iStackSize。 i++) { for(int j=0。 jdata[i]。 j++) cout。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。