1、ChainNode *link;class Chainpublic:Chain()first=0;Chain();bool IsEmpty()constreturn first=0; int Length()const;bool Find(int k,T&x) ;Chain&Insert(int k,const T&x); Change(int k,T x); Delete(int k, T & Search(const T&x)const; int OutPut();*first;/析构函数(删除链表的所有节点) templatelink; delete first; first=next;
2、/确定链表的长度 template int Chainreturn len;/在链表中查找第 K 个元素 template bool ChainFind(int k,T &x) int index=0; while(indexdata;return true; return false;/向链表中插入元素 Chain*p=first;for(int index=1;index*y=new ChainNodedata=x;if(k)y-link=p-p-link=y;else link=first;first=y;return *this;/改变链表第 k 个元素的值 templateif (p
3、)/删除链表第 k 个元素 template else* p = first;* q = first;k-1&q;q=q-p=q- q-link=p- x=P- delete p; return *this;/搜索第 k 个元素 templatedata !=x)current = current- index +;if(current)return index; return 0;/倒序输出链表 template current=current- index+;index=index-1;cout=0;index-)cout.fill(0);cout.width(3);endl;return
4、 0;int main()int A;int n,i,j,k;int l=0;A.Insert(0,1);please enter a number :cinn;for(i=1;i=n;i+)int m=A.Length();for(j=0;j=1000)if(jm-1)A.Find(j+1,l);else A.Insert(j+1,0); l=0;l+=k/1000;A.Change(j+1,l);k=k%1000;Length = A .Length() cout 阶乘为: A.OutPut();测试数据】(1)n=20, n!=2432902008176640000(2)n=30, n!
5、=265252859812191058636308480000000【运行结果】please enter a number:20Length=7;阶乘为: 2432902008176640000实习题目二算术表达式求值【问题描述】 对一个合法的中缀表达式求值。假设表达式只包含 +、- 、*、/ 四个双目运算符,并且允许有括号出现,运算符 本身不具有二义性。例如: 3.5*(7+2) /(-6)(1)正确解释表达式;(2) 符合四则运算规则:先乘除、后加减从左到右运算先括号内,后括号外(3)输出最后的计算结果【实现关键】两个栈的使用两位数以上、负数、小数点?【实现方式】基本:控制台程序(1)使用
6、两个工作栈:一个栈OPTR存放运算符;stack另一个栈OPND存放操作数;double(2)运算符之间的优先关系可用二维数组(算符优先顺序如下: )+-*/()#=【实现代码】#i nclude #in cludeclass StackStack(int MaxStackSize=10); Stack()delete stack; bool lsEmpty()co nst return top=-1; bool IsFull()c on stretur n top=MaxTop; T Top()c on st;StackvT Add(co nst T &Delete(T &int top;i
7、nt MaxTop;T*stack; template StackStack(int MaxStackSixe) MaxTop=MaxStackSixe-1; stack=new TMaxStackSixe; top=-1; templateT StackTop()constreturn stacktop;Stack=sji-)if(expriexpri) k.Add(expri);k.Delete(a);k.Delete(b); n=Cal(b,expri,a);m=n+k.Add(m); 表达式的值为:(double)k.Top()-48【运行结果】 请输入中缀表达式并以 #结尾 (4+2
8、)/3-4*3后缀表达式为 :42+3/43*- 表达式的值为 : -10实习题目三二叉树基本算法的实现【 功能要求 】实现 Create 方法,要求键盘输入二叉树结点序列,创建一棵二叉树(提示:前 序递归)实现SwapTree方法,以根结点为参数,交换每个结点的左子树和右子树(提示: 前序递归)增加 InorderTree 方法,采用非递归方法实现二叉树的中序遍历 你可以选择:对 BinaryTree 模板进行功能扩充; 自己定义并实现二叉树类 要求键盘输入二叉树结点序列 结点序列可以是前序,也可以是层次 空结点以 #表示【 代码实现 】/ 二叉树 01.cpp : Defines the
9、entry point for the console application./ templateclass BinaryTreeNode;class BinaryTreeBinaryTree()root=0;BinaryTree(const BinaryTree &Tree )copy(Tree.root,root);BinaryTree();bool IsEmpty()constreturn (root)?false:true);void Creat();bool Root (T&void MakeTree(const T&element,BinaryTreeleft,BinaryTre
10、eright);void BreakTree( T&void PreOrder(void (*Visit)(BinaryTreeNode*u)PreOrder(Visit,root);void InOrder(void (*Visit)(BinaryTreeNodeInOrder(Visit,root);void PostOrder(void (*Visit)(BinaryTreeNodePostOrder(Visit,root);void LevelOrder(void(*Visit)(BinaryTreeNode*u);void PreOutput()PreOrder(Output,roo
11、t);void InOutput()InOrder(Output,root);void Postput()PostOrder(Output,root);void LevelOutPut()LevelOrder(Output);void Delete()PostOrder(Free,root);int Height()constreturn Height(root);int Size()constreturn Size(root);BinaryTreeNode*iCreat();bool equal(BinaryTreeTree)return compare(root,Tree.root);vo
12、id swap() swap(root);int leave()return leave(root);int noleave()return noleave(root);*root;void PreOrder(void(*Visit)(BinaryTreeNode*u),BinaryTreeNode*t);void InOrder(void(*Visit)(BinaryTreeNodevoid PostOrder(void(*Visit)(BinaryTreeNode static void Output(BinaryTreeNode* t) coutdata static void Free
13、(BinaryTreeNode*t)delete t;int Height(BinaryTreeNode*t)const;int Size(BinaryTreeNodebool compare(BinaryTreeNode*t1,BinaryTreeNode*t2);void copy(const BinaryTreeNode*&t2);void swap(BinaryTreeNode int leave(BinaryTreeNode int noleave(BinaryTreeNode class LinkedQueue; class Node friend LinkedQueue private:Node*link; class LinkedQueue public:LinkedQueue() front=rear=0;LinkedQueue(); bool IsEmpty()constreturn (front)?bool IsFull()const;T First()const;T Last()const;LinkedQueueAdd(const T &*front; Node
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1