数据结构编程求救实验一实验内容:二阶Fibonacci数列的定义如下:F0=1,F1=1,F2=2,F3=3,F4=5,

joewm2022-10-04 11:39:541条回答

数据结构编程求救
实验一
实验内容:
二阶Fibonacci数列的定义如下:F0=1,F1=1,F2=2,F3=3,F4=5,…,Fi=Fi-1+ Fi-2,i≥1.试用递归和非递归两种方法写出计算Fn的函数.
实验要求:
1.写出计算Fn的递归函数Fib_rec.
2.写出计算Fn的非递归函数Fib_ite.
实验二
实验内容:
1.两个有序序列的合并
将长度分别为m,n的两个有序整数序列合并为一个长度为m+n的有序序列.存储结构采用链表.
实验三
实验内容:
1.实现栈的如下基本操作:push,pop,isempty,isfull,createstack.
2.利用栈的基本操作实现函数conversion(),该函数能把任意输入的十进制整数转化为2进制形式表示.
实验要求:
1.用链表存储结构实现栈的基本操作:push,pop,isempty,isfull,createstack.
2利用栈的基本操作完成函数conversion(),使用以上的基本操作函数完成数制转换函数.
实验四
实验内容:
利用栈的基本操作解决判断输入的括号序列(只有“(” 和“)”组成)是否匹配的问题.
实验要求:
1.用链表存储结构实现栈的基本操作:push,pop,isempty,isfull,createstack.
2.通过调用以上栈的基本函数,实现括号匹配函数,该函数的输入是存储表达式的字符串,输出为是否匹配(如果匹配则返回1,否则返回0).所谓匹配就是左边的一个“(”必须在右边有一个与之对应的“)”.
3.在main()函数中实现表达式的输入,调用括号匹配函数,以及输出.若匹配则输出“ok”,否则输出“bad”.
实验五
实验内容:
在计算机中创建如图所示的二叉树,分别对它进行中序遍历,并输出遍历结果.
注:采用二叉链表作为二叉树的存储结构.
实验要求:
1.编写创建如图所示二叉树的函数,函数名为create.
2.编写递归实现二叉树的中序、先序和后序遍历算法.函数名分别为:inorder,preorder,postorder.
3.完成适合于二该二叉树遍历的栈的push和pop函数.
4.编写中序遍历的非递归函数,函数名称为iter_inorder.
实验六
实验内容:
1.对于给定的某无序序列,使用直接插入排序、快速排序进行排序,并输出每种排序下的各趟排序结果.
各排序算法的输入:
无序序列为:26 5 37 1 61 11 59 15 48 19
输出要求:
对每种算法均需输出原始数据序列、每趟排序的中间结果序列和最后排好序的有序序列.
实验要求:
1.分别实现直接插入排序、快速排序算法.
2.对于给定的输入序列(26 5 37 1 61 11 59 15 48 19),分别用各算法进行排序,并依次输出原始数据序列、每趟排序的中间结果序列和最后已排序的有序序列.
实验七
实验内容:
对于任意输入的图,用邻接表存储该图,输出图并深度优先搜索该图.
输入:无向图中的顶点个数和边数,然后依次输入所有的边,假设同一条边不会输入两次.
输出:然后打印出所有的邻接表,然后打印dfs结果.

已提交,审核后显示!提交回复

共1条回复
潇洒来去1 共回答了19个问题 | 采纳率73.7%
晕!自己想吧!
1年前

相关推荐

(数据结构编程)求含有四则运算表达式的值
(数据结构编程)求含有四则运算表达式的值
用+ - × /() 和 0 1 2 3 4 5 6 7 8 9 组成像这样的表达式: 8-6/2-3×4+(1+9)/2 然后编程求值,要求能运算任何表达式的值一:写出编程思想或方法二:要有流程图三:两种方法四:请附上运行后的图
ndynkte3i1年前1
yiukwin 共回答了18个问题 | 采纳率88.9%
#include
#include
#include
#include
#define N 50
struct NumStack//定义栈结构体,用来存贮运算数字
{
int top;
double array[N];
};
struct OpStack//定义栈结构体,用来存贮运算符号
{
int top;
char array[N];
};
int Cint(char mychar)//函数,数符转化成数字
{
return (mychar-48);
}
void PushNum(NumStack *numstack,double num)
{
numstack->top++;//移动指针 numstack->array[numstack->top-1]=num;//插入元素
}
void PopNum(NumStack *numstack,double *num)//输出数
{
*num=numstack->array[numstack->top-1];
numstack->top--;//移动指针
}
void PushOp(OpStack*opstack,char op)//输入运算符
{
opstack->top++;
opstack->array[opstack->top-1]=op;
}
void PopOp(OpStack*opstack,char *op)//输出运算符
{
*op=opstack->array[opstack->top-1];
opstack->top--;
}
double Calc(double a,double b,char c)//两个数的四则运算
{
double result;
switch(c){
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
}
return result;
}
char Priority(char y,char x)//算术优先级的判定
{
char priority='';break;
case '*':
case '/':if(y=='('||y=='#'||y=='-'||y=='+')priority='>';break;
case '(':priority='>';break;
case ')':if(y=='(')priority='=';break;
case '#':if(y=='#')priority='=';break;
default:priority='E';
}
return priority;
}
void Process(NumStack *numstack,OpStack *opstack,char x)//主要实现函数
{
double a,b;char c;
static double tempnum=0.00000000;
static int len=10;
static int dot=0,flags=0;
if(isdigit(x) || x=='.')
{
if(x=='.')dot=1;
else
{
if(dot==0)//前趋数部分数值还原
tempnum=tempnum*10+Cint(x);
else{tempnum=tempnum+(double)Cint(x)/len; len*=10;}//else
}//else
}//if
else
{
if(flags==0 && x!='(')
{
PushNum(numstack,tempnum);
tempnum=0.00000000;
len=10;dot=0;
}
switch(Priority(opstack->array[opstack->top-1],x))
{
case '>':PushOp(opstack,x);flags=0;break;
case '

大家在问