数据结构大题 - 范文中心

数据结构大题

11/29

线性表

四、已知一个单向链表,试给出复制该链表的算法。

要求:1、定义线性表的节点的结构以及节点的型和位置的型。

2、定义线性表的基本操作

3、在1,2的基础上,完成本题。

4、在main 函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。

五、写出从一个带表头的单链表中删除其值等于给定值x 的结点的算法函数:

int delete(LIST &L, int x);如果x 在该链表中,则删除对应结点,并返回其在链表中的位置(逻辑位置,第一个结点的逻辑位置为1),否则返回-1。

要求:1、定义线性表的节点的结构以及节点的型和位置的型。

2、定义线性表的基本操作

3、在1,2的基础上,完成本题。

4、在main 函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。

#include

#include

using namespace std;

typedef int elementtype;

struct node{

elementtype element;

node *next;

};

typedef node *LIST;

typedef node *position;

position End(LIST L)//求末尾节点

{

position p=L;

while(p->next!=NULL)

{

p=p->next;

}

return p;

}

void Insert(elementtype x,position p)//插入

{

position q=new node;

q->element=x;

q->next=p->next;

p->next=q;

}

void Delete(position p)//删除

{

if(p->next!=NULL)

{

position q=p->next;

p->next=q->next;

delete q;

}

}

position Locate(elementtype x,LIST L)//定位值为x 的元素

{

position p=L;

while(p->next!=NULL&&p->next->element!=x)

p=p->next;

return p;

}

position MakeNULL(LIST &L)//置空

{

L=new node;

L->next=NULL;

return L;

}

void Print(LIST L)//打印连表中元素

{

position p=L->next;

while(p!=NULL)

{

coutelement

p=p->next;

}

cout

}

void Copy(LIST &L1,LIST L2)

{

position p1=L1;

position p2=L2->next;

while(p2!=NULL)

{

position n =new node;

n->element=p2->element;

n->next=NULL;

p1->next=n;

p2=p2->next;

p1=p1->next;

}

p1=NULL;

}

void Read(LIST &L)

{

position p=L;

cout

int m;

for(;;)

{

position n=new node;

cin>>m;

if(m==-1)

break;

n->element=m;

n->next=NULL;

p->next=n;

p=p->next;

}

}

int deleteElement(LIST &L,int x)

{

position p=L;

int loc=0;

while(p->next)

{

if(p->next->element==x)

{

position q=p->next;

p->next=q->next;

delete q;

return ++loc;

}

++loc;

p=p->next;

}

return -1;

}

int main()

{

LIST L1 = new node;

} L1->next = NULL; LIST L2 = new node; L2->next = NULL; Read(L2); Print(L2); Copy(L1, L2); Print(L1); int n; cout > n; int value = deleteElement(L1, n); if (value == -1){ cerr

五、已知非空二叉树T ,写一个算法,求度为2的结点的个数。 要求:

1、定义二叉树的抽象数据类型和型BTREE ,并定义基本操作。

2、编写函数count2(BTREE T),返回度为2的节点的个数。

3、在主函数中,构建一个二叉树,并验证所编写的算法。

六、用递归方法写一个算法,求二叉树的叶子结点数int leafnum(BTREE T)。 要求:

1、 定义二叉树的抽象数据类型和型BTREE ,并定义基本操作。

2、 编写函数leafnum(BTREE T),返回树T 的叶子节点的个数。

在主函数中,构建一个二叉树,并验证所编写的算法。

#include

#include

using namespace std;

typedef char datatype;

struct node{

node *lchild;

node *rchild;

datatype data;

};

typedef node*BTREE;

void Empty(BTREE &BT)//置零

{

BT=NULL;

}

bool isEmpty(BTREE BT)//判断是否为空

{

if(BT)

return true;

else

return false;

}

BTREE CreateBT(datatype v,BTREE ltr,BTREE rlr)//左右子树建立二叉树 {

BTREE root;

root->data=v;

root->lchild=ltr;

root->rchild-rlr;

return root;

}

BTREE Lchild(BTREE BT)//返回右子树

{

return BT->lchild;

}

BTREE Rchild(BTREE BT)//返回左子树

{

return BT->rchild;

}

datatype Data(BTREE BT)//返回节点元素

{

return BT->data;

}

void PreOrder(BTREE BT)//先根遍历

{

if(BT)

{

coutdata

PreOrder(BT->lchild);

PreOrder(BT->rchild);

}

}

void InOrder(BTREE BT)//中根遍历

{

if(BT)

{

InOrder(BT->lchild);

coutdata

InOrder(BT->rchild);

}

}

void PostOrder(BTREE BT)//后跟遍历

{

if(BT)

{

PostOrder(BT->lchild);

PostOrder(BT->rchild);

coutdata

}

}

int count2(BTREE BT)//返回度为2的节点的个数 {

if(BT->lchild==NULL&&BT->rchild==NULL) return 0;

if(BT->lchild&&BT->rchild)

return 1+count2(BT->lchild)+count2(BT->rchild); if(BT->lchild&&BT->rchild==NULL)

return count2(BT->lchild);

if(BT->lchild==NULL&&BT->rchild)

return count2(BT->rchild);

}

int leafnum(BTREE BT)//返回叶节点个数

{

static int count=0;

if(BT->lchild==NULL&&BT->rchild==NULL) {

return ++count;

}

else

{

leafnum(Lchild(BT));

leafnum(Rchild(BT));

}

}

void CreateBTREE(BTREE &BT,char *str)//先根输入树 {

char ch;

ch=*str++;

if(ch=='#')

BT=NULL;

else

{

BT=new node; BT->data=ch;

CreateBTREE(BT->lchild,str); CreateBTREE(BT->rchild,str); }

}

int main()

{

BTREE BT=NULL;

char *str="abc##d##ef##g##"; CreateBTREE(BT,str); PreOrder(BT);

cout

InOrder(BT);

cout

PostOrder(BT);

cout

}

cout


相关内容

  • 地理信息系统概论--知识点总结
    地理信息系统概论 第一章 导论 数据与信息的关系: 数据:是通过数字化或记录下来可以可以被鉴别的符号,不仅数字是数据,而且文字.符号.图象也是数据,数据本身没有意义: 信息:是对数据的解释.运用与解算,数据即使是经过处理以后的数据,只有经过 ...
  • 大数据在计算机信息处理技术中的应用_张莉
    第13卷 第6期2014年12月淮北职业技术学院学报 JOURNALOFHUAIBEIPROFESSIONALANDTECHNICAOLLEGELC Vol.13No.6 Dec.2014 大数据在计算机信息处理技术中的应用 张 莉,汪 伟 ...
  • 第一章 数据库系统基础
    院 系: 教研室: 教 师: <数据库原理及应用>课程教案 注:表中( )选项请打"∨" 第一章 数据库系统概述 [教学目的与要求] 通过课程学习,要求学生了解数据库系统的产生与发展状况,掌握数据库系统基本概 ...
  • 计算机网络与信息系统集成调研报告
    <计算机网络信息系统集成>课程研究报告 姓 名:阳 涛 学 院:湖北工业大学 班 级:控制工程班 学 号:520130114 时 间:2013年8月12日 基于数据仓库的数据挖掘技术分析研究 摘 要 基于数据仓库的数据挖掘技术是 ...
  • 数据库原理期末考试习题
    第一章 绪论 一.选择题: 1.使用二维表格结构表达数据和数据间联系的数据模型是(C ) C .关系模型 2.DB .DBS .DBMS 间的关系是(C ) A .层次模型 B .网状模型 D .实体-联系模型 A .DB 包括DBMS 和 ...
  • 栅格数据编码技术的发展历程
    栅格数据编码技术的发展历程 2015.4 南通大学地科院 江浩田 摘要:栅格数据是结构是GIS中最基本的数据结构,本文对栅格数据的属性.小.形状等做出一些系统的描述和分析,其中重点在几种数据结构上做了比较详细的论述和讲解,包括栅格矩阵结构. ...
  • 从"会计核算软件数据接口标准"看税收业务系统接口标准
    从"会计核算软件数据接口标准"看税收业务系统接口标准 [内容摘要]"会计核算软件数据接口标准"(GBT 19581-2004)这一国家标准中给出了了会计核算软甲中各类数据的标准标准定义,就目前来看,尚 ...
  • 非结构构件地震反应分析及设计方法
    第26卷第1期 河北建筑工程学院学报 2008年3月JOURNALOFHEBEIINSTITUTEOFARCHITECTUREANDCIVILENGINEERINGVo.l26No.1March2008 非结构构件地震反应分析及设计方法 毕 ...
  • 数据库选择题
    1 逻辑模型不包括( ),它是按计算机系统的观点对数据建模,主要用于DBMS 的实 现. A .层次模型 B .网状模型 C.关系模型 D.文件模型 D 2 数据模型的组成要素不包括( ). A .数据结构 B .数据操作 C.完整 性约束 ...
  • 建筑结构可靠度设计统一标准_GB50068-2001
    众智软件 http://www.gisroad.com 中华人民共和国国家标准 建筑结构可靠度设计统一标准 Unified standard for reliability design of building structures GB ...