4.13实验 加测试题目

news/2024/11/9 0:52:06/

今天是个好日子,要搞栈的实验

没啥就是链栈和顺序栈

和出栈入栈,强大都是从最基本开始的

来和我一起写写吧

//顺序栈
typedef struct node{int *base;int *top;int sizer;
}shed;//链栈
typedef struct Node{
int data;
struct Node* next;
}*stact,link;
//顺序栈的初始化

基本的模板 

接下来就是push和pop

//顺序栈的入栈
void push(shed &s,int e){if((s.top-s.base)!=s.sizer)*(s.top++)=e;elseprintf("栈满,操作无效");
}//链栈的入栈
void pushs(stact &t,int i){stact k=(stact)malloc(sizeof(stact));k->next=t->next;k->data=i;t->next=k;}

一点不长但是就是脑袋要清晰一点 ,错了就要每个看一遍难受的要命

pop

//顺序栈的出栈
void pop(shed &s,int &a){if(s.base==s.top)printf("栈空操作无效");elsea=*(--s.top);
}//链表的出栈
void pops(stact t,int &e){if(t->next!=NULL){stact p=t->next;t->next=p->next;//头节点后第一个出去的e=p->data;free(p);}
}

细心永远不亏!!

接下来就是遍历输出

//链栈的展示
void shows(stact t){
stact p=t->next;
while(p!=NULL){printf("%d ",p->data);p=p->next;
}
printf("\n");
}//顺序栈的输出展示
void show(shed &s){int* j=s.base;for(;j<s.top;j++)printf("%d ",*j);printf("\n");
}

没有写返回栈元素数目(实验的没要求) 

其他的要求都可以用这上面的函数拼成

写完有时间看看我测试没写完的题目了

FBI树

Description

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:

1)T的根结点为R,其类型与串S的类型相同;

2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2^n的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。

Input

第一行是一个整数N(0  < =  N  < =  10),第二行是一个长度为2^N的“01”串。

数据规模和约定,对于全部的数据,N  < =  10。

注:
[1]  二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。
[2]  后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

Output

包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

Sample Input 1 

3 
10001011 

Sample Output 1

IBFBBBFIBFIIIFF

没错是线段树,很简单的线段树

本来想用之前的线段树的模板改成答案,发现连lazy数组都不要,简直太友好了,那就直接重大一遍

 关键就是对树的维护就不是加减乘除了,而是用字符判断了

#include<stdio.h>
#include<string.h>
char tree[5050];//开这末大是怕最后遍历的时候会下标越界
char a[1050];void nerw(){
for(int j=1;j<=5050;j++){tree[j]='0';
}}void he(int p){//维护数组if(tree[2*p]=='F'||tree[2*p+1]=='F'){tree[p]='F';}else if(tree[2*p]=='I'&&tree[2*p+1]=='B'){tree[p]='F';}else if(tree[2*p]=='B'&&tree[2*p+1]=='I'){tree[p]='F';}else if(tree[2*p]=='B'&&tree[2*p+1]=='B'){tree[p]='B';}else if(tree[2*p]=='I'&&tree[2*p+1]=='I'){tree[p]='I';}}void builtree(int p,int x,int y){
if(x==y){if(a[x-1]=='0'){tree[p]='B';}else{tree[p]='I';}
}
else{int mid=(x+y)/2;builtree(2*p, x, mid);builtree(2*p+1, mid+1,y);
}
he(p);
}void bianli(int p){if(tree[p]!='0'){bianli(2*p);bianli(2*p+1);printf("%c",tree[p]);}else{return ;}
}int main(){
int n;
nerw();
scanf("%d",&n);
scanf("%s",a);
int l=strlen(a);
builtree(1,1,l);bianli(1);return 0;
}

通俗易懂,学过线段树的人一看就会

几天没写线段树,现在又相当于复习了哈哈

今天ok了

撒花谢幕!!!!!!

 

 


http://www.ppmy.cn/news/42765.html

相关文章

Linux系统对文件及目录的权限管理(chmod、chown)

1、身份介绍 在linux系统中&#xff0c;对文件或目录来说访问者的身份有三种&#xff1a; ①、属主用户&#xff0c;拥有者&#xff08;owner&#xff09;文件的创建者 ②、属组用户&#xff0c;和文件的owner同组的用户&#xff08;group&#xff09;&#xff1b; ③、其他用…

【前端工具】使用真机在chrome远程调试

手机端需要做的事 手机上下载chrome浏览器 手机开启“开发者模式” 具体步骤各个品牌手机不太一样&#xff0c;华为手机为例&#xff1a; 打开手机上的 “设置” 图标&#xff0c; 进入最下方 “系统” 选项&#xff0c; 再点击最上方 “关于手机”&#xff0c; 接着连续点击 …

【数据结构】顺序表(上)

所属专栏&#xff1a;初始数据结构 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785> 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&#xff01;&#xff01;&#xff01; 博主也会更加的努力&#xff0c;创作出更优质的博文&#xff01;&#x…

Centos Stream 9 图文详细安装记录

1. 下载镜像文件ISO 官方&#xff1a; https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/iso/ 清华&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/ 阿里云&#xff1a;https://mirrors.aliyun.com/centos-stream/9-st…

【C++STL精讲】vector的模拟实现

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;定义vector类&#x1f337;各成员函数的实现&#x1f33a;构造函数&#x1f33a;迭代器&#x1f33a;size与capacity——求大小与容量&#x1f33a;reserve——扩容关于reserve中的深浅拷贝问题&#x1f33a;r…

事务的隔离级别和传播行为

什么是事务&#xff1f; 事务&#xff1a;是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&#xff1b;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行&#xff1b;事务是一组不可再分割的操作集合&#xff08;工作逻…

JavaWeb——synchronized详解

目录 一、特性 1、互斥性 2、不可中断性 3、可重入性 二、使用 1、修饰普通方法 2、修饰静态方法 3、修饰代码块 三、锁机制 一、特性 1、互斥性 当线程进入synchronized修饰的代码块时&#xff0c;就相当于加锁。当线程退出synchronized修饰的代码块时&#xff0c;就…

恒生电子面试题总结

CPU突然飙升&#xff0c;如何排查 1.监控cpu运行状态&#xff0c;显示进程运行信息列表 top -c 2. 按CPU使用率排序&#xff0c;键入大写的P P 3.用 top -Hp 命令查看占用 CPU 最高的线程 上一步用 top命令找到了那个 Java 进程。那一个进程中有那么多线程&#xff0c;不可…