• 大小: 4.04MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-24
  • 语言: 其他
  • 标签: 存储器  CPU  74LS138  

资源简介

本压缩包包括一份存储器与CPU连接的作业,作业形式为ppt,word。另外添加了20套与存储器有关的试卷附有答案,作业内容如下:   某系统CPU地址总线20条,数据总线8条,存储器系统由8KB的ROM(用2K*8位的2716芯片)和1KB的RAM(用1K*4位的2142芯片)组成,译码器采用74LS138。要求: 画出CPU和存储器的连接图(采用全译码方式); 确定地址范围(ROM处于低地址,RAM处于高地址); 利用下列规范的逻辑电路符号表示(见附录) 用Powerpoint做出演示电子版,两页,一页连接图,另一页为地址范围。

资源截图

代码片段和文件信息

#define MAX_NUM 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define Status int
#define LH 1  //左高
#define RH -1 //右高
#define EH 0  //等高
#define TETYPE “%c“
#define TElemType char
#include 
#include 
#include 
#include 
typedef struct BSTNode
{
TElemType data;
int      bf;                    //结点的平衡因子
struct BSTNode *lchild *rchild;//左.右孩子指针
}BSTNode *BSTree;
//***********基本操作***************************************
void Visit(BSTree T)
{
printf(TETYPE T->data);
printf(“(%d)“ T->bf);
printf(“ “);
}
Status BSTreeEmpty(BSTree T)
//初始条件:平衡二叉排序树存在。
//操作结果:若T为空平衡二叉排序树,则返回TRUE否则FALSE.
{
return (T ? FALSE : TRUE);
}
int BSTreeDepth(BSTree T)
//初始条件:平衡二叉排序树存在。操作结果:返回T的深度。
{
int L_depthR_depth;
if(T==NULL)
return 0;
else
{
if(T->lchild)
L_depth = BSTreeDepth(T->lchild);
else
L_depth = 0;
if(T->rchild)
R_depth = BSTreeDepth(T->rchild);
else
R_depth=0;
return (L_depth >= R_depth ? L_depth : R_depth)+1;
}
}
int LeafNum(BSTree T)
//求叶子结点数,非递归中序遍历
{
BSTree s[MAX_NUM]; int i=0num=0; BSTree p;

if(T)
{
s[i++]=T;
while(i)
{
while((p=s[i-1])&&p)
s[i++]=p->lchild;
--i;//空指针出
if(i)
{
p=s[--i];
if(!p->lchild&&!p->rchild)
{
num++;
Visit(p);
putchar(‘ ‘);
}
s[i++]=p->rchild;
}
}
}
return num;
}
int NodeNum(BSTree T)
//求结点数,非递归中序遍历
{
BSTree s[MAX_NUM]; int i=0num=0; BSTree p;

if(T)
{
s[i++]=T;
while(i)
{
while((p=s[i-1])&&p)
s[i++]=p->lchild;
--i;//空指针出
if(i)
{
p=s[--i];
num++;
s[i++]=p->rchild;
}
}
}
return num;
}
void DestoryBSTree(BSTree *T)
//后序遍历销毁平衡二叉排序树T
{
if(*T)
{
if((*T)->lchild)
DestoryBSTree(&(*T)->lchild);
if((*T)->rchild)
DestoryBSTree(&(*T)->rchild);
free(*T);
*T = NULL;
}
}
void R_Rotate(BSTree *p)
{//对以*p为根的平衡二叉排序树作右旋处理,处理之后p指向新的树根结点
 //即旋转处理之前的左子树的根结点
BSTree lc = NULL;

lc = (*p)->lchild;        //lc指向*p的左子树根结点
(*p)->lchild = lc->rchild;//lc的右子树挂接为*p的左子树
lc->rchild = *p;
*p = lc;                //p指向新的根结点
}
void L_Rotate(BSTree *p)
{//对以*p为根的平衡二叉排序树作左旋处理,处理之后p指向新的树根结点,
 //即旋转处理之前的右子树的根结点
BSTree rc = NULL;

rc = (*p)->rchild;        //rc指向*p的右子树根结点
(*p)->rchild = rc->lchild;//rc的左子树挂接为*p的右子树
rc->lchild = *p;        
*p = rc;                //p指向新的根结点
}
void LeftBalance(BSTree *T)
{//对以指针T所指结点为根的平衡二叉排序树作左平衡旋转处理,
 //本算法结束时,指针T指向新的根结点
BSTree lc = NULL rd = NULL;

lc = (*T)->lchild;   //lc指向*T的左子树的树根结点
switch(lc->bf)       //检查*T的左子树的平衡度,并作相应的平衡处理
{
case LH:             //新结点插入在*T的左孩子的左子树上,要作单右旋处理
(*T)->bf = lc->bf = EH;
R_Rotate(T);
break;
case RH:             //新结点插入在*T的左孩子的右子树上,要作双旋处理
rd = lc->rchild; //rd指向*T的左孩子的右子树的根
switch(rd->bf)   //根据其的平衡度,修改*T及其左孩子的平衡因子
{
case LH:
(*T)->bf = RH;
lc->bf = EH;
break;
case EH:
(*T)->bf = l

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      20360  2009-12-22 16:15  b.c

     文件     188452  2009-12-22 16:10  b.exe

----------- ---------  ---------- -----  ----

               208812                    2


评论

共有 条评论