数据结构实习题目文档格式.docx

上传人:b****6 文档编号:17424006 上传时间:2022-12-01 格式:DOCX 页数:51 大小:28.36KB
下载 相关 举报
数据结构实习题目文档格式.docx_第1页
第1页 / 共51页
数据结构实习题目文档格式.docx_第2页
第2页 / 共51页
数据结构实习题目文档格式.docx_第3页
第3页 / 共51页
数据结构实习题目文档格式.docx_第4页
第4页 / 共51页
数据结构实习题目文档格式.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

数据结构实习题目文档格式.docx

《数据结构实习题目文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实习题目文档格式.docx(51页珍藏版)》请在冰豆网上搜索。

数据结构实习题目文档格式.docx

⏹intSearch(constT&

//查找元素x

⏹Chain<

&

Delete(intk,T&

x);

//删除第k个元素

Insert(intk,constT&

//在第k个元素之后插入x

⏹voidOutput(ostream&

out)const;

//单链表的输出

Fac(longn);

⏹//求大数阶乘

*first;

//指向第一个节点

⏹Chain<

:

~Chain()

⏹{//删除所有的节点

*next;

⏹while(first)

⏹{

⏹next=first->

link;

⏹deletefirst;

⏹first=next;

⏹}

⏹}

⏹boolChain<

Find(intk,T&

x)const

⏹{//查找第k个元素,并赋值给x

⏹if(k<

1)returnfalse;

*current=first;

⏹intindex=1;

⏹while(index<

k&

current)

⏹current=current->

⏹index++;

⏹if(current)

⏹x=current->

data;

⏹returntrue;

⏹returnfalse;

⏹intChain<

Search(constT&

⏹{//查找元素x,返回该元素的下标

⏹while(current&

current->

data!

=x)

⏹if(current)returnindex;

⏹return0;

Chain<

Delete(intk,T&

x)

⏹{//删除第k个元素,并赋值给x,返回改变后的链表

*p=first;

⏹if(k==1)

⏹first=first->

⏹else

*q=first;

⏹for(intindex=1;

index<

k-1&

q;

index++)

⏹q=q->

⏹p=q->

⏹q->

link=p->

⏹}

⏹x=p->

⏹deletep;

⏹return*this;

Length()const//返回链表的长度

⏹{

⏹intlen=0;

⏹while(current)

⏹len++;

⏹returnlen;

Insert(intk,constT&

x)//在第k个元素之后插入x,返回插入后的链表

p;

index++)

⏹p=p->

*y=newChainNode<

⏹y->

data=x;

⏹if(k)

⏹p->

link=y;

⏹else

link=first;

⏹first=y;

⏹voidChain<

Output(ostream&

out)const//输出链表元素

*current;

⏹inti=0,j=Length();

⏹for(current=first;

current;

current=current->

link)

⏹i++;

⏹if(i==j&

j>

=1)

⏹{

⏹if(current->

⏹out<

<

setw(3)<

setfill('

0'

)<

data<

"

⏹else

⏹out<

⏹i=1;

⏹j--;

⏹current=first;

⏹}

⏹out<

first->

data<

"

//重载运算符<

⏹ostream&

operator<

(ostream&

out,constChain<

⏹{x.Output(out);

returnout;

}

Fac(longn)//初始化

⏹inti=0;

⏹longj=n;

⏹while(j>

999)

⏹Insert(i,j%1000);

⏹j=j/1000;

⏹Insert(i,j);

//通过插入来建立链表(0,20)

⏹//计算

⏹longm=0,k=0;

⏹for(;

n>

2;

n--)

⏹for(current=first;

current;

link)//?

⏹{

⏹m=k;

⏹k=(current->

data*(n-1)+k)/1000;

//向前进位

⏹current->

data=(current->

data*(n-1)+m)%1000;

⏹if(!

current->

link&

k>

0)//?

⏹while(k>

⏹{

⏹Insert(Length(),k%1000);

⏹k=k/1000;

⏹}

⏹Insert(Length(),k);

//链表长度加一

⏹k=0;

⏹break;

⏹}

⏹intmain()

⏹longn;

⏹charch;

⏹do

⏹cout<

请输入需要阶乘的数字n:

⏹cin>

>

n;

⏹Chain<

long>

a;

⏹a.Fac(n);

n<

的阶乘为:

endl;

a;

是否进行计算:

ch;

⏹}while(ch=='

Y'

);

2:

题目:

表达式求值

v要求:

实现关键

▪栈的使用

▪两位数以上、负数、小数点?

v实现方式

▪控制台程序

▪MFC对话框

#include"

#include<

usingnamespacestd;

#include<

assert.h>

cstdlib>

math.h>

template<

classStack

{

public:

Stack(intsz=50);

~Stack()

{

delete[]elements;

}

voidPush(constT&

x);

//压入栈

boolPop(T&

//弹出栈

TGetTop(void)const;

//取栈顶元素

boolIsEmpty()const

return(top==-1)?

true:

false;

boolIsFull()//判断栈是否满

return(top==MaxSize-1)?

intGetSize()const//?

returntop+1;

voidMakeEmpty()

top=-1;

private:

T*elements;

inttop;

intMaxSize;

voidoverflowProcess();

//栈溢出处理

};

Stack<

Stack(intsz)

top=-1;

MaxSize=sz;

elements=newT[MaxSize];

//创建栈的数组空间

assert(elements!

=NULL);

//判断动态内存是否分配成功是否

voidStack<

Push(constT&

x)

if(IsFull()==true)

{

overflowProcess();

}

top++;

elements[top]=x;

boolStack<

Pop(T&

if(IsEmpty()==true)

returnfalse;

x=elements[top--];

returntrue;

TStack<

GetTop(void)const//返回栈顶元素

cerr<

栈为空!

exit

(1);

}

returnelements[top];

overflowProcess()//溢出处理

T*newArray=newT[2*MaxSize];

//扩充栈的空间

for(inti=0;

i<

=top;

i++)

MaxSize=2*MaxSize;

newArray[i]=elements[i];

delete[]elements;

//释放原来旧的空间

classCalculater//计算的声明

public:

Calculater(){}

voidRun();

//执行表达式计算

voidClear();

//清空处理

private:

Stack<

double>

s;

//声明double型的栈对象

voidAddOperand(doublevalue);

//把数值压入栈中

boolGetOperand(double&

left,double&

right);

//判断取操作数操作是否成功

voidDoOperator(charch);

//进行操作

voidCalculater:

AddOperand(doublevalue)

s.Push(value);

boolCalculater:

GetOperand(double&

right)

if(s.IsEmpty()==true){

缺少右操作数"

s.Pop(right);

缺少左操作数"

s.Pop(left);

Clear()

s.MakeEmpty();

DoOperator(charch){

doubleleft,right,value;

boolresult;

result=GetOperand(left,right);

if(result==true)

switch(ch)

case'

+'

value=left+right;

s.Push(value);

break;

-'

value=left-right;

*'

value=left*right;

/'

if(right==0.0)

{

cerr<

Divideby0!

Clear();

}

else

value=left/right;

s.Push(value);

cout<

="

s.GetTop()<

else

Clear();

Run()

charch;

doublenewOperand;

while(cin>

ch,ch!

='

#'

switch(ch)

case'

case'

//是操作数,执行计算

DoOperator(ch);

default:

//其实也是一种case,只不过就是指“除了指定的几个case以外的其他情况”,不是操作符

cin.putback(ch);

//字符放回输入流

cin>

newOperand;

//重新读取操作数,一个操作数的第一个字符

AddOperand(newOperand);

//将操作数放入栈中

intmain()

Calculatercall;

cout<

输入计算表达式:

call.Run();

return0;

3.题目:

v题目:

二叉树基本算法的实现

v功能要求:

v键盘输入二叉树结点序列,创建一棵二叉树

v实现S方法,以根结点为参数,交换每个结点的左子树和右子树(提示:

前序递归)

v实现Find方法,查找值为key的结点,并输出该结点的所有祖先结点

v你可以选择:

v对BinaryTree模板进行功能扩充;

v自己定义并实现二叉树类

v要求键盘输入二叉树结点序列

v结点序列可以是前序,也可以是层次

v空结点以#表示

//binarytree.h

#ifndefBINARYTREE_H

#defineBINARYTREE_H

iostream.h>

classBinaryTreeNode//二叉树结点

//friendBinaryTree<

BinaryTreeNode(){LeftChild=RightChild=0;

BinaryTreeNode(constT&

e)

data=e;

LeftChild=RightChild=0;

e,BinaryTreeNode*l,BinaryTreeNode*r)

LeftChild=l;

RightChild=r;

Tdata;

BinaryTreeNode<

*LeftChild,*RightChild;

classBinaryTree

friendBinaryTreeNode<

BinaryTree()

root=0;

~BinaryTree(){}

boolIsEmpty()const

return((root)?

false:

true);

voidCreat();

voidPreOrder(void(*Visit)(BinaryTreeNode<

*u))//前序遍历

{

PreOrder(Visit,root);

voidInOrder(void(*Visit)(BinaryTreeNode<

*u))//中序遍历

InOrder(Visit,root);

voidPostOrder(void(*Visit)(BinaryTreeNode<

*u))//后序遍历

PostOrder(Visit,root);

voidLevelOrder(void(*Visit)(BinaryTreeNode<

*u))//层次遍历

PreOrder(Output,root);

voidInOutput()//中序输出

InOrder(Output,root);

voidPostput()//后序输出

PostOrder(Output,root);

voidLevelOutPut()//层次输出

LevelOrder(Output);

intHeight()const//计算树的高度

returnHeight(root);

intSize()const//计算树的大小

returnSize(root);

*iCreat();

voidswap()//交换左右节点

s);

intleave()//计算叶子节点个数

returnleave(root);

intnoleave()////计算非叶子节点个数

returnnoleave(root);

*root;

voidPreOrder(void(*Visit)(BinaryTreeNode<

*u),BinaryTreeNode<

*t);

voidInOrder(void(*Visit)(BinaryTreeNode<

voidPostOrder(void(*Visit)(BinaryTreeNode<

//voidLevelOrder(void(*Visit)(BinaryTreeNode<

staticvoidOutput(BinaryTreeNode<

*t)//输出树的所有节点

t->

intHe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1